AOP爲Aspect Oriented Programming的縮寫,意爲:面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。web
AOP與OOP是面向不一樣領域的兩種設計思想。正則表達式
OOP(面向對象編程)針對業務處理過程的實體及其屬性和行爲進行抽象封裝,以得到更加清晰高效的邏輯單元劃分。編程
AOP則是針對業務處理過程當中的切面進行提取,它所面對的是處理過程當中的某個步驟或階段,以得到邏輯過程當中各部分之間低耦合性的隔離效果。緩存
咱們能夠單單從上面的字面上來理解AOP和OOP的話,用下面的理解也不爲過:框架
OOP其實是對對象的屬性和行爲的封裝,而AOP對於這點就無從談起,可是AOP是處理某個步驟和階段的,從中進行切面的提取,也就是說,若是幾個或更多個邏輯過程當中,有重複的操做行爲,AOP就能夠提取出來,運用動態代理,實現程序功能的統一維護,這麼說來可能太含蓄,若是說到權限判斷,日誌記錄等,可能就明白了。若是咱們單純使用OOP,那麼權限判斷怎麼辦?在每一個操做前都加入權限判斷?日誌記錄怎麼辦?在每一個方法裏的開始、結束、異常的地方手動添加日誌?全部,若是使用AOP就能夠藉助代理完成這些重複的操做,就可以在邏輯過程當中,下降各部分之間的耦合了。兩者揚長補短,互相結合最好。模塊化
下面詳細瞭解一些AOP的概念:spa
方面(Aspect):一個關注點的模塊化,這個關注點實現可能另外橫切多個對象。事務管理是J2EE應用中一個很好的橫切關注點例子。方面用Spring的Advisor或攔截器實現。.net
鏈接點(Joinpoint):程序執行過程當中明確的點,如方法的調用或特定的異常被拋出。設計
通知(Advice):在特定的鏈接點,AOP框架執行的動做。各類類型的通知包括「around」、「before」和「throws」通知。通知類型將在下面討論。許多AOP框架包括Spring都是以攔截器作通知模型,維護一個「圍繞」鏈接點的攔截器鏈。代理
切入點(Pointcut):指定一個通知將被引起的一系列鏈接點的集合。AOP框架必須容許開發者指定切入點,例如,使用正則表達式。
引入(Introduction):添加方法或字段到被通知的類。Spring容許引入新的接口到任何被通知的對象。例如,你可使用一個引入使任何對象實現IsModified接口,來簡化緩存。
目標對象(Target Object):包含鏈接點的對象,也被稱做被通知或被代理對象。
AOP代理(AOP Proxy):AOP框架建立的對象,包含通知。在Spring中,AOP代理能夠是JDK動態代理或CGLIB代理。
編織(Weaving):組裝方面來建立一個被通知對象。這能夠在編譯時完成(例如使用AspectJ編譯器),也能夠在運行時完成。Spring和其餘純Java AOP框架同樣,在運行時完成織入。
Spring 中 AOP 代理由 Spring 的 IoC 容器負責生成、管理,其依賴關係也由 IoC 容器負責管理。
與AOP相關文章連接:http://blog.csdn.net/liujiahan629629/article/details/18864211