AOP
- 什麼是AOP及實現方式
- AOP的基本概念
- Spring中的AOP
- Schema-based AOP
- Spring AOP API
- AspectJ
什麼是AOP
- AOP:Aspect Oriented Programming的縮寫,意爲:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術
- 主要的功能是:日誌記錄,性能統計,安全控制,事務處理,異常處理等
AOP實現方式
- 預編譯
– AspectJ
- 運行期動態代理(JDK動態代理、CGLib動態代理)
– SpringAOP、JbossAOP
AOP幾個相關概念
名稱 |
說明 |
切面(Aspect) |
一個關注點的模塊化,這個關注點可能會橫切多個對象 |
連接點(Joinpoint) |
程序執行過程中的某個特定的點 |
通知(Advice) |
在切面的某個特定的連接點上執行的動作 |
切入點(Pointcut) |
匹配連接點的斷言,在AOP中通知和一個切入切入點表達式關聯 |
引入(Introduction) |
在不修改類代碼的前提下,爲類添加新的方法和屬性 |
目標對象(Targer Object) |
被一個或者多個切面所通知的對象 |
AOP代理對象 |
AOP框架創建的對象,用來實現切面契約(aspectcontract)(包括通知方法執行等功能) |
織入(Weaving) |
把切面連接到其他的應用程序類型或者對象上,並創建一個被通知的對象,分爲:編譯時織入,類加載時織入、執行時織入 |
Advice的類型
名稱 |
說明 |
前置通知(Before Advice |
在某連接點(join point)之前執行的通知,但不能阻止連接點前的執行(除非它拋出一個異常) |
返回後通知(After returing 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代理(如果一個業務對象並沒有實現一個接口 )
根據慕課網 moocer老師的spring課程 整理