spring-AOP
AOP為Aspect Oriented Programming的縮寫,意為:面向切面程式設計,通過預編譯方式和運作期動态代理實作程式功能的統一維護的一種技術。AOP是OOP的延續,是Spring架構中的一個重要内容,是函數式程式設計的一種衍生範型。利用AOP可以對業務邏輯的各個部分進行隔離,進而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。
在不影響原來功能代碼的基礎上,使用動态代理加入自己需要的一些功能(比如權限的驗證,事務的控制,日志的記錄等等),移除之後,并不影響原來的功能。
AOP的advice有哪些:
(1)before:在執行切入的方法之前,執行代碼。
(2)after returning:在執行切入的方法正常執行(沒有異常)之後,執行代碼。
(3)after throwing:在執行切入的方法發生異常的時候,執行代碼
(4)after:在執行切入的方法之後,無論是否發生異常,都必須最後執行代碼
(5)around:相當于before和after returning的組合。
開發中,事務的處理是在service層處理的,是以必須切入service層
1)找到需要加事務的方法(方法的定位,可以類似于通配符來定位)
execution(public * 包名..(…))
2)找到之後,在方法開始之前,需要加上事務
對應advice:before
3)在方法運作中如果有異常,復原
對應advice:after throwing
4)在方法運作中沒有異常,送出
對應advice:after returning
5)無論是否有異常,關閉釋放資源
對應advice:after
1、配置圖解
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLxMGVP5WNXlVNk1mYox2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwkTMxIzMxYTM2ETOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2、使用注解annotation完成aop的配置
(1)根據jdk版本确定aspjectj的版本
jdk與aspectj版本比對的問題
JDK1.6 —— aspectJ1.6
JDK1.7 —— aspectJ1.7.3+
(2)啟用動态代理
3、因為要生成aop的對象,并且切面還要調用aop對象的方法,是以加上注解@Component,@Aspect
4、定義切點,明确切入的表達式和切點的名字
5、定義注解實作的advice,@Before,@AfterReturning,@AfterThrowing,@After,@Around