AOP (切點表達式講解)


 

Spring EL表達式::

 

1、execution 表達式

  語法格式: execution(返回類型.包名.類名.方法名(參數表))

  exection(*.com.xxx.AService.*(..))

  com.xxx.AService 類型中的任意方法,任意類型返回結果,參數表不限定,都增加切面

  應用:最常用。也是相對最通用。根據方法執行的標准,定義切點 如 事務  日志

<aop:config>
  <aop:pointcut expression="execution(* com.bjsxt.test.Demo.demo1(..))" id="mypoint"/>
</aop:config>

2、target 表達式

  以目標對象作為切點的表達式定義方式 (用於某一個接口or某一類接口)

  語法:target(包名.接口名)

  如:target(com.xx.IA)  所有實現了IA接口的實現類,作為代理的目標對象,會自動增加通知的織入,是實現切面

  應用:為某一個具體的接口實現提供的配置。如 登錄的時候需要執行的附屬邏輯是比較多的。在不同的業務流程中,附屬邏輯也不同。如,電商中,可能在登錄的時候需要去執行購物車合並

<aop:config>
  <aop:pointcut expression="target(com.bjsxt.aop.TestService)" id="mypoint"/>
</aop:config>

3、this 表達式

  實現某接口的任意代理對象都作為切點

  語法:this(包名.接口名)

  如:this(com.xxx.IA)  代理對象 Proxy如果實現了IA接口,則作為連接點

  應用:針對某個具體的代理提供的配置。比target切點粒度細致。因為目標對象可以多實現。代理對象可以針對目標對象實現的多個接口的某一個接口,提供特定的切點。如,銀行中的登錄,銀行中的賬戶種類非常多,且有交叉。如借記卡,貸記卡,借記還貸卡。。。。可以針對還貸接口提供一個切點,做還貸信息 的記錄等。

<aop:config>
  <aop:pointcut expression="this(com.bjsxt.aop.TestService)" id="mypoint"/>
</aop:config>

4、 within 表達式

  以包作為目標,定義切點

  語法: within(包名.*) 代表在包中的任意接口或類型都作為切點

  應用:針對某一個包提供的切點,粒度比target粗糙。如:某包中的所有接口都需要執行某附屬邏輯。如 電商平台中的下訂單。下訂單服務中可能需要特定的邏輯(時間戳校驗,庫存檢查等),這些邏輯,是其他業務線中不需要提供切面的

<aop:config>
  <aop:pointcut expression="within (com.bjsxt.aop.*)" id="mypoint"/>
</aop:config>

5、args表達式

  以參數標准作為目標,定義切點

  語法: args(類型,類型.....) 代表方法的參數表符合要求的時候,作為切點,參數表是有順序的

  應用:主要應用在參數校驗中。如:登錄的時候必須傳遞兩個字符串參數(登錄名和密碼)。可以使用args來限定。配合這execution實現。如:execution(.*.xxx.*.login(..)) args(String,String)。是使用頻率最低的表達式

<aop:config>
  <aop:pointcut expression="args (java.lang.String)" id="mypoint"/>
</aop:config>

 


免責聲明!

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



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