- AOP:Aspect Oriented Programing的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序程序功能的統一維護的一種技術
- 主要的功能是:日志記錄,性能統計,安全控制,事務處理,異常處理...
- AOP的實現方式:
- 預編譯 --- AspectJ
- 運行期動態代理(JDK動態代理,CGLib動態代理) ---- SpringAOP、JbossAOP
- AOP幾個相關的概念
名稱 | 說明 |
切面(Aspect) | 一個關注點的模塊化,這個關注點可能會橫切多個對象 |
連接點(Joinpoint) | 程序執行過程中的某個特定的點 |
通知(Advice) | 在切面的某個特定的連接點上執行的動作 |
切入點(Pointcut) | 匹配連接點的斷言,在AOP中通知和一個切入點的表達式 |
引入(Introduction) | 再不修改類代碼的前提下,為類添加新的方法和屬性 |
目標對象(Target Object) | 被一個或多個切面所通知的對象 |
AOP代理(AOP Proxy) | AOP框架創建的對象,用來實現切面契約(aspect contract)(包括通知方法執行等功能) |
織入(Weaving) | 把切面連接到其他的應用程序類型或者對象上,並創建一個被通知的對象, 分為:編譯時織入、類加載時織入、執行時織入 |
- Advice的類型
名稱 | 說明 |
前置通知(Before advice) | 在某個連接點(join point)之前執行的通知,但不能阻止連接點前的執行(除非它拋出異常) |
返回后通知(After returning advice) | 在某個連接點(join point)正常完成后執行的通知 |
拋出異常后通知(After throwing advice) | 在方法拋出異常退出時執行的通知 |
后通知(After(finally) advice) | 當某個連接點退出的時候執行的通知(無論是正常返回還是異常退出) |
環繞通知(Around advice) | 包圍一個連接點(join point)的通知 |
- Spring框架中AOP的用途
-
- 提供了聲明式的企業服務,特別是EJB的替代服務聲明
- 允許用戶定制自己的方面,以完成OOP與AOP的互補使用
- Spring的AOP實現
-
- 純java的實現,無特殊的變編譯過程,不需要控制類加載器層次
- 目前只支持方法執行的連接點(通知Spring Bean 的方法執行)
- 不是為了提供最完整的AOP實現(盡管他非常強大);而是側重於提供一種AOP實現和Spring IOC 容器之間的整合,用於幫助解決企業應用中的常見問題
- Spring AOP不會與AspectJ競爭,也不會提供綜合全面的AOP解決方案
- 有接口無接口的Spring AOP 實現區別
-
- Spring AOP默認使用標准的javaSE動態代理作為AOP代理,這使得任何接口(或者接口集)都可以被代理
- Spring AOP中也可以使用CGLib代理(如果一個業務對象並沒有實現一個接口)
以下轉自(我感覺講的很好,值得讀完):http://blog.csdn.net/evankaka/article/details/45242505
AOP(Aspect-Oriented Programming,面向切面編程),可以說是OOP(Object-Oriented Programing,面向對象編程)的補充和完善。OOP引入封裝、繼承和多態性等概念來建立一種對象層次結構,用以模擬公共行為的一個集合。當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關系,但並不適合定義從左到右的關系。例如日志功能。日志代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系。對於其他類型的代碼,如安全性、異常處理和透明的持續性也是如此。這種散布在各處的無關的代碼被稱為橫切(cross-cutting)代碼,在OOP設計中,它導致了大量代碼的重復,而不利於各個模塊的重用。
而AOP技術則恰恰相反,它利用一種稱為“橫切”的技術,剖解開封裝的對象內部,並將那些影響了多個類的公共行為封裝到一個可重用模塊,並將其名為“Aspect”,即切面。所謂“切面”,簡單地說,就是將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來,便於減少系統的重復代碼,降低模塊間的耦合度,並有利於未來的可操作性和可維護性。AOP代表的是一個橫向的關系,如果說“對象”是一個空心的圓柱體,其中封裝的是對象的屬性和行為;那么面向切面編程的方法,就仿佛一把利刃,將這些空心圓柱體剖開,以獲得其內部的消息。而剖開的切面,也就是所謂的“切面”了。然后它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡。
使用“橫切”技術,AOP把軟件系統分為兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關系不大的部分是橫切關注點。橫切關注點的一個特點是,他們經常發生在核心關注點的多處,而各處都基本相似。比如權限認證、日志、事務處理。Aop 的作用在於分離系統中的各種關注點,將核心關注點和橫切關注點分離開來。正如Avanade公司的高級方案構架師Adam Magee所說,AOP的核心思想就是“將應用程序中的商業邏輯同對其提供支持的通用服務進行分離。”