Spring aop AspectJ切入點初用心得
阿新 • • 發佈:2018-12-27
以前專案中未用過aop,故一直對aop不瞭解,近期看了看,大致瞭解了下,在上程式碼前首先需要了解aop一些基本概念。
一、AOP基本概念
- : 1、Aspect(切面):說白了就是一個class,裡面定義切入點和通知
-
2、JointPoint(連線點):接入點,例如方法執行、類初始化、異常處理。 在Spring AOP中,接入點始終表示方法執行。
-
3、Advice(增強):AOP在特定的切入點上執行的增強處理,主要包括下面幾種:before,after,afterReturning,afterThrowing,around,執行順序為:around->before->around->after->afterReturning 或 afterThrowing
-
4、Pointcut(切入點):用來匹配特定的接入點,增強會與切點表示式產生關聯,並執行在任何切點匹配到的接入點上。說白點也就是定義觸發時機。
-
5、AOP代理:為了實現切面功能一個物件會被AOP框架創建出來。在Spring框架中AOP代理的預設方式是:有介面,就使用基於介面的JDK動態代理,否則使用基於類的CGLIB動態代理。但是我們可以通過設定proxy-target-class=“true”,完全使用CGLIB動態代理。
二、模擬aspect advice的執行過程
- 1、手動配置
- 首先建立一個普通class,裡面包含advice的幾種增強處理。如圖:
class建立完畢後,開始配置spring配置檔案,如圖:
下來測試:
執行結果:
請忽略上圖中**null:0 這個,是個人實現類中的console資訊 - 2、註解方式
- 與手動配置區別在於切面類和配置,先看切面類,需要用@Aspect標識,每個增強也是用註解標註:
配置檔案:
執行結果就不展示了,和手動配置一致
通過上面執行結果可以看出Advice(增強)的執行過程:
此外需要注意afterReturning中指定的返回值,其實接受的是arround中的返回值。如果需要對返回結果進行修改,需要在arround中進行操作。