aop是個規範,是動態**的規範化,乙個標準
aop的技術實現框架
spring:
aspectj:
aspectj框架的使用
切面的執行時間,這個執行時間在規範中,叫做通知/增強 advice
切入點表示式
表示切面執行的位置使用的是 切入點表示式
execution
(modifiers-pattern? ret-type-pattren
declaring-type-pattern?name-
pattern
(param-pattern)
throws
-pattern?
)
execution:關鍵字
小括號開始 小括號結束
第乙個引數:方法的訪問修飾符【modifiers-pattern】 後面問號表示可選,可以不填
然後乙個空格
第二個引數:方法返回值的資料型別【ret-type-pattren】
第三個引數:方法所在的包名類名 ?【declaring-type-pattern】
第四個引數:方法名【name-pattern】
(param-pattern)方法的引數,只填寫型別就行,形參名不需要
第五個:方法所丟擲的異常
萬用字元符號意義*
0至多個任意字元
…用在方法引數中,表示任意多個引數。用在包名後,表示當前包及其子包路徑
+用在類名後面,表示當前類及其子類。用在介面後,表示當前介面及實現類
經典切入點表示式
execution
(public**
(..)
) 指定切入點為:任意功能方法
execution
(* set*(.
.)) 指定切入點為:任意乙個以 set 開始的方法
execution
(* com.xyz.service.*.*(..
)) 切入點:service包中的所有類 的所有方法引數任意(子包中不算)
execution
(* com.xyz.service.
.*.*(..
)) 切入點:定義在service或者子包中任意類的任意方法
..出現在類名中時,後面必須跟」*「表示包,子包下的所有類
execution(*
*..service.*.*(..
))+ 指定所有包下的service子包下所有類(介面)中所有方法為切入點
execution(*
*.service.*.*(..
)) 指定只有以及包下的service子包下所有類(介面)中所以後方法為切入點
Spring AOP 定義切入點
首先我們編寫了通知advice,但是我們還不能表達在應用系統的什麼地方應用這些通知,切入點決定了乙個特定類的特定方法是否滿足特定規則,如果滿足則通知就應用到該方法上,spring的切入點可以讓我們靈活的定義在什麼地方應用通知。spring的切入點框架的核心介面pointcut public inte...
Spring AOP的切入點execution寫法
任意公共方法的執行 execution public 任何乙個以 set 開始的方法的執行 execution set accountservice 介面的任意方法的執行 execution com.xyz.service.accountservice.定義在service包裡的任意方法的執行 ex...
Spring AOP切入點表示式
為了過濾方法以便將通知應用於spring bean,spring aop提供了各種匹配表示式。這些表示式通常也被稱為切入點指示符 根據型別 比如介面 類名或者包名 過濾方法,spring aop提供了within關鍵字。語法 within 示例 within com.該通知匹配該包及其子包下的所有的...