記得有次面試中面試官問到,跟我談談spring aop,當時我就悶了,當時腦海里只浮現出切入點、切面、引入、通知等等一些很模糊的概念,于是結果可想而知。所以最近用下心來為自己做下記錄方便以后查看(為以后的面試做好準備,呵呵),如果以下有什么疏忽的地方或者寫的不好的地方,還請發現者多多指導。
什么是AOP
AOP(aspect-OrientedProgramming),也就是面向切面編程。也可以這樣理解,學java的應該都知道面向對象編程(oop),而OOP是從靜態解讀考慮程序結構,但AOP是從動態角度考慮程序運行過程。也可以說AOP是OOP的補充和完善。OOP引入了封裝、繼承和多態性等概念來建立一種對象層次結構, 用以模擬公共的一個集合。當我們需要為分散的對象引入公共行為的時候,則OOP顯得無能為力了。也就是說,OOP允許你定義從上到下的關系,但并不適合從左到右的關系,例如日志功能。日志代碼往往水平的散步在所有對象層次中,而與它所散步到的對象的核心功能毫無關系。對于其他類型的代碼,如安全性、異常處理和透明的持續性也是如此。這種散布在各處的無關的代碼被稱為橫切代碼,在oop設計中,他導致了大量代碼的重復,而不利于各個模塊的重用。
而AOP技術則恰恰相反,它利用一種稱為“橫切”的技術,剖解開封裝的對象內部,并將哪些影響了多個類的公共行為封裝到一個可重用模塊,并將其名為'Aspect',及方面。 所謂"方面",簡單的來說就是將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來。便于減少系統的重復代碼,降低模塊間的耦合度等。
實現AOP的技術,主要分為兩大類:一是采用動態代理技術,利用截取信息的方式,對該信息進行裝飾,以取代魚油對象行為的執行;二是采用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼。
AOP的相關概念
方面:一個關注點的模塊化,這個關注點實現可能另外橫切多個對象。事物管理是J2EE應用中一個很好的很橫切關注點例子。
連接點:程序執行過程中明確的點,如方法的調用或特定的異常被拋出。
通知:在特定的連接點上AOP框架執行的動作。Spring中定義了四個advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice
切入點:指定一個通知將被引發的一系列連接點的集合。
引入:添加方法或字段到被通知的類。
目標對象:含連接點的對象。pojo
AOP代理(AOP Proxy): AOP框架創建的對象,包含通知。
織入(Weaving): 組裝方面來創建一個被通知對象。
AOP配置
這個可以參考其他地方的寫法,這里就不多敘述了。
參考文章地址:http://blog.csdn.net/moreevan/article/details/11977115
新聞熱點
疑難解答