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