AOP源碼分析三:pointcut的配置說明

aop配置中有如下一行:  

<aop:pointcut expression="execution(* com.aop.service..*(..))" 

其中expression="execution(* com.aop.service..*(..))"的配置規則如下:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
execution(方法的操作權限    返回值類型模式              方法所在的包                  方法名 (參數名)            異常)

public ,private  方法的操作權限(modifiers-pattern)
*最常用作返回類型模式(ret-type-pattern),它匹配任何返回類型
如果指定方法所在的包(聲明類型模式declaring-type-pattern),請包含尾部"."以將其連接到名稱模式組件
將*通配符用作方法名(名稱模式name-pattern)的全部或部分。

參數名(參數模式)稍微複雜一些:
()                 匹配不帶參數的方法,
(..)               匹配任何數量(零個或多個)參數。
(*)                模式匹配採用任何類型的一個參數的方法
(*,String)     匹配一個帶有兩個參數的方法。第一個可以是任何類型,而第二個必須是String


返回值,方法名,參數名,必須有,其他可選


執行任何公共方法:
execution(public * *(..))


執行名稱以以下開頭的任何方法set:
execution(* set*(..))


執行AccountService接口定義的任何方法:
execution(* com.xyz.service.AccountService.*(..))


執行service包中定義的任何方法:
execution(* com.xyz.service.*.*(..))


執行服務包或其子包中定義的任何方法:
execution(* com.xyz.service..*.*(..))

參考:
https://docs.spring.io/spring/docs/5.1.9.RELEASE/spring-framework-reference/core.html#aop

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章