Spring AOP中pointcut expression表達式解析


注解@Pointcut 是指哪些方法 需要被執行 AOP,是由“PointCut Expression”

execution(modifier-pattern? ret-type-pattern declaring-type-pattern?  name-pattern(param-pattern) throws-pattern?) 
pattern分別表示修飾符匹配(modifier-pattern?)、返回值匹配(ret-type-pattern)、類路徑匹配(declaring-type-pattern?)、方法名匹配(name-pattern)、參數匹配((param-pattern))、異常類型匹配(throws-pattern?),其中后面跟着“?”的是可選項。

Pointcut 可以有下列方式來定義或者 通過 && || 和 ! 方式進行組合

@args()

@execution()

@target()

@within()

@annotation()

 

其中 execution 是用的最多的,其格式為:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

ret-type-pattern:可以為*表示任何返回值,全路徑的類名等.

declaring-type-pattern 

name-pattern:指定方法名,*代表所以,set*,代表以set開頭的所有方法.

parameters pattern:指定方法參數(聲明的類型),(..)代表所有參數,(*)代表一個參數,(*,String)代表第一個參數為任何值,第二個為String類型.

 

execution(修飾類型 返回類型 )

modifiers-pattern 修飾類型(可選):可取值, public ,protected,private,* (* 代表全部)

ret-type-pattern 返回類型 :可取值, 所有可以作為返回類型的名字,自定義類可以寫包的路徑(用正則表達式匹配)

declaring-type-pattern

舉例說明:(問:到底哪里需要空格呢?空格加多了有影響嗎?)

任意公共方法的執行:

  execution(public * *(..))

任何一個以“set” 開始的方法的執行

  execution(* set*(..))

AccountService 接口的任意方法的執行

  execution(* com.xyz.service.AccountService.*(..)))

定義在service 包里的任意方法的執行

  execution(* com.xyz.service.*.*(..))

定義在service 包和所有子包里的任意類的任意方法的執行

  execution(* com.xyz.service..*.*(..))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM