您好,登錄后才能下訂單哦!
SpringBoot如何使用面向切面編程AOP以及execution表達式的介紹,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
我們使用最多的就是execution表示了,下面就從execution表達式開始介紹吧。
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
execution匹配的就是連接點(Joinpoint),看上面的表達式execution是固定的,方法的修飾符是可選的,返回類型是必須的,定義的全限類型也是可選的,名稱是必須的,參數是必須的,這些都可以使用通配符。
任何的public方法
execution(public * *(..))
以set開始的方法
execution(* set*(..))
定義在cn.freemethod.business.pack.Say接口中的方法
execution(* cn.freemethod.business.pack.Say.*(..))
任何cn.freemethod.business包中的方法
execution(* cn.freemethod.business.*.*(..))
任何定義在com.xyz.service包或者其子包中的方法
execution(* cn.freemethod.business..*.*(..))
任何在com.xyz.service包中的方法
within(com.xyz.service.*)
任何定義在com.xyz.service包或者其子包中的方法
within(com.xyz.service..*)
任何實現了com.xyz.service.AccountService接口中的方法
this(com.xyz.service.AccountService)
任何目標對象實現了com.xyz.service.AccountService的方法
target(com.xyz.service.AccountService)
一般情況下代理類(Proxy)和目標類(Target)都實現了相同的接口,所以上面的2個基本是等效的。
有且只有一個Serializable參數的方法
args(java.io.Serializable)
只要這個參數實現了java.io.Serializable接口就可以,不管是java.io.Serializable還是Integer,還是String都可以。
目標(target)使用了@Transactional注解的方法
@target(org.springframework.transaction.annotation.Transactional)
目標類(target)如果有Transactional注解中的所有方法
@within(org.springframework.transaction.annotation.Transactional)
任何方法有Transactional注解的方法
@annotation(org.springframework.transaction.annotation.Transactional)
有且僅有一個參數并且參數上類型上有Transactional注解
@args(org.springframework.transaction.annotation.Transactional)
注意是參數類型上有Transactional注解,而不是方法的參數上有注解。
bean的名字為tradeService中的方法
bean(simpleSay)
bean名字為simpleSay中的所有方法。
bean名字能匹配
bean(*Impl)
bean名字匹配*Impl的bean中的所有方法。
看完上述內容,你們掌握SpringBoot如何使用面向切面編程AOP以及execution表達式的介紹的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。