標籤:
一直以來,我們應用了不少的AOP架構,但是對於AOP的底層實現卻沒有過多的深入,古話就是“知其然,不知其所以然”,隨著AOP學術討論的驟然興起,我也開拓了自己的眼界,深入瞭解了AOP這個五彩斑斕的世界!
先來看看福士的定義:
百度百科:
在軟體業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過先行編譯方式和運行期動態代理實現程式功能的統一維護的一種技術。AOP是OOP的延續,是軟體開發中的一個熱點,也是Spring架構中的一個重要內容,是函數式編程的一種衍生範型。利用AOP可以對商務邏輯的各個部分進行隔離,從而使得商務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。
維基百科:
面向側面的程式設計(aspect-oriented programming,AOP,又譯作面向方面的程式設計、觀點導向編程、剖面導向程式設計)是電腦科學中的一個術語,指一種程式設計範型。該範型以一種稱為側面(aspect,又譯作方面)的語言構造為基礎,側面是一種新的模組化機制,用來描述分散在對象、類或函數中的橫切關注點(crosscutting concern)。
側面的概念源於對物件導向的程式設計的改進,但並不只限於此,它還可以用來改進傳統的函數。與側面相關的編程概念還包括元對象協議、主題(subject)、混入(mixin)和委託。
看了這些範範的定義,我也很暈,但是,我們可以從最簡單的問題深入,這個簡單的問題就是“我們為什麼編程?”
我對這個問題的解答就是,為了不編程!我們創造函數,創造類,創造架構,創造軟體,創造IDE是為了什嗎?是為了一步一步消滅人類的重複勞動!是為瞭解放人,讓人發揮人最大的特質,就是思考和總結!
順著這個思路,我們來還原AOP最初的樣子:
1,拋棄複製!
在最初的程式設計中,我們需要為我們編寫的每個類加上日誌,事務控制!我們的程式猿老老實實寫了N多的Tlog和交易處理!當有一天,有個程式猿突然說,我煩了這麼繁重的工作,我一定要將代碼中重複的部分拿到公用類中處理!
:
2,依賴反轉
經過一段時間後,某猿又不滿意了,因為我還是要針對每個類調用公用類,他就翻看了設計模式,發現,代理是不錯的解決方案,如果使用動態代理,就更有意思了
:
兩種動態代理
3,AOP
又過了一段時間,程式員將動態代理與IOC結合,寫出了一個架構,叫AOP架構,從此免費提供給所有需要這個業務的人,java又多了一個概念,就是AOP
概念:
總結:
在電腦誕生之初,就是為了替人做一些重複性的簡單的工作,隨著電腦技術的深入,我們的這個初衷,一直沒有變過,電腦最大的優點就是重複,作為程式設計者,在所有員工的工作中,我們是否都應該考慮,這個工作是必須的嗎?這個工作是純潔的copy嗎?這個工作可以交給電腦來做嗎?這個工作是不是一個人做了,大家都可以使用呢?這些工作,不僅僅需要設計師腦海中的經驗,還有對於業務的抽象能力以及整體架構的把控力!
作為21世紀的程式設計者,你還在讓員工做無謂的copy嗎?
java架構解密——Spring架構的AOP