AOP是OOP的延續,是(Aspect Oriented Programming)的縮寫,意思是面向切面(方面)程式設計,是目前軟體開發中的一個熱點,也是Spring架構中的一個重要内容。利用AOP可以對業務邏輯的各個部分進行隔離,進而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。
主要的功能是:日志記錄,性能統計,安全控制,事務處理,異常處理等等。
主要的意圖是:将日志記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以将它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不影響業務邏輯的代碼。
可以通過預編譯方式和運作期動态代理實作在不修改源代碼的情況下給程式動态統一添加功能的一種技術。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說也是這種目标的一種實作。
将通用需求功能從不相關類之中分離出來;同時,能夠使得很多類共享一個行為,一旦行為發生變化,不必修改很多類,隻要修改這個行為就可以。
AOP就是這種實作分散關注的程式設計方法,它将“關注”封裝在“方面”中。AOP 是一個概念,一個規範,本身并沒有設定具體語言的實作
OOP(面向對象程式設計)針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯單元劃分。而AOP則是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。這兩種設計思想在目标上有着本質的差異。
OOP引入封裝、繼承和多态性等概念來建立一種對象層次結構,用以模拟公共行為的一個集合。當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關系,但并不适合定義從左到右的關系。例如日志功能。日志代碼往往水準地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系。對于其他類型的代碼,如安全性、異常處理和透明的持續性也是如此。這種散布在各處的無關的代碼被稱為橫切(cross-cutting)代碼,在OOP設計中,它導緻了大量代碼的重複,而不利于各個子產品的重用。
而AOP技術則恰恰相反,它利用一種稱為“橫切”的技術,剖解開封裝的對象内部,并将那些影響了多個類的公共行為封裝到一個可重用子產品,并将其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是将那些與業務無關,卻為業務子產品所共同調用的邏輯或責任封裝起來,便于減少系統的重複代碼,降低子產品間的耦合度,并有利于未來的可操作性和可維護性。AOP代表的是一個橫向的關系,如果說“對象”是一個空心的圓柱體,其中封裝的是對象的屬性和行為;那麼面向方面程式設計的方法,就仿佛一把利刃,将這些空心圓柱體剖開,以獲得其内部的消息。而剖開的切面,也就是所謂的“方面”了。然後它又以巧奪天功的妙手将這些剖開的切面複原,不留痕迹。
實作AOP的技術,主要分為兩大類:一是采用動态代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;二是采用靜态織入的方式,引入特定的文法建立“方面”,進而使得編譯器可以在編譯期間織入有關“方面”的代碼。然而殊途同歸,實作AOP的技術特性卻是相同的,分别為:
1、join point(連接配接點):是程式執行中的一個精确執行點,例如類中的一個方法。它是一個抽象的概念,在實作AOP時,并不需要去定義一個join point。
2、point cut(切入點):本質上是一個捕獲連接配接點的結構。在AOP中,可以定義一個point cut,來捕獲相關方法的調用。
3、advice(通知):是point cut的執行代碼,是執行“方面”的具體邏輯。
4、aspect(方面):point cut和advice結合起來就是aspect,它類似于OOP中定義的一個類,但它代表的更多是對象間橫向的關系。
5、introduce(引入):為對象引入附加的方法或屬性,進而達到修改對象結構的目的。有的AOP工具又将其稱為mixin。
上述的技術特性組成了基本的AOP技術,大多數AOP工具均實作了這些技術。它們也可以是研究AOP技術的基本術語。
AOP應用:
很明顯,AOP非常适合開發J2EE容器伺服器,目前JBoss 4.0正是使用AOP架構進行開發。
具體功能如下:
Authentication 權限
Caching 緩存
Context passing 内容傳遞
Error handling 錯誤處理
Lazy loading 延時加載
Debugging 調試
logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準
Performance optimization 性能優化
Persistence 持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務