一、AOP的核心概念
-
概念:AOP(Aspect Oriented Programming)面向切面編程,一種編程範式
-
作用:在不驚動原始設計的基礎上爲方法進行功能增強
-
核心概念
-
代理(Proxy):SpringAOP的核心本質是採用代理模式實現的
-
連接點(JoinPoint):在SpringAOP中,理解爲任意方法的執行
-
切入點(Pointcut):匹配連接點的式子,也是具有共性功能的方法描述
-
通知(Advice):若干個方法的共性功能,在切入點處執行,最終體現爲一個方法
-
切面(Aspect):描述通知與切入點的對應關係
-
目標對象(Target):被代理的原始對象成爲目標對象
-
二、切入點表達式
-
切入點表達式標準格式:動作關鍵字(訪問修飾符 返回值 包名.類/接口名.方法名(參數)異常名)
execution(* com.itheima.service.*Service.*(..))
-
切入點表達式描述通配符:
-
作用:用於快速描述,範圍描述
-
*
:匹配任意符號(常用) -
..
:匹配多個連續的任意符號(常用) -
+
:匹配子類類型
-
-
切入點表達式書寫技巧
1.按標準規範開發
2.查詢操作的返回值建議使用*匹配
3.減少使用..的形式描述包
4.對接口進行描述,使用*表示模塊名,例如UserService的匹配描述爲*Service
5.方法名書寫保留動詞,例如get,使用*表示名詞,例如getById匹配描述爲getBy*
6.參數根據實際情況靈活調整
三、五種通知類型
-
-
後置通知
-
環繞通知(重點)
-
環繞通知依賴形參ProceedingJoinPoint才能實現對原始方法的調用
-
環繞通知可以隔離原始方法的調用執行
-
環繞通知返回值設置爲Object類型
-
環繞通知中可以對原始方法調用過程中出現的異常進行處理
-
-
返回後通知
-
拋出異常後通知
四、通知中獲取參數
-
獲取切入點方法的參數,所有的通知類型都可以獲取參數
-
JoinPoint:適用於前置、後置、返回後、拋出異常後通知,設置爲方法的第一個形參
-
ProceedingJoinPoint:適用於環繞通知
-
-
獲取切入點方法返回值,前置和拋出異常後通知是沒有返回值,後置通知可有可無,所以不做研究
-
返回後通知
-
環繞通知
-
-
獲取切入點方法運行異常信息,前置和返回後通知是不會有,後置通知可有可無,所以不做研究
-
拋出異常後通知
-
環繞通知
-