Spring Boot - AOP(面向切面)-切入點表達式


切入點指示符用來指示切入點表達式目的,在 Spring AOP 中目前只有執行方法這一個連接點,Spring AOP 支持的 AspectJ 切入點指示符,切入點表達式可以使用 &&||、!來組合切入點表達式,還可以使用類型匹配的通配符來進行匹配,類型通配符如下:

類型匹配通配符

說明

*

表示匹配任何數量字符。示例:java.*.String,表示匹配 java 包下的任何"一級子包"下的 String 類型; 如匹配 java.lang.String,但不匹配java.lang.ss.String

..

表示任何數量字符的重復,如在類型模式中匹配任何數量子包;而在方法參數模式中匹配任何數量參數。示例:java..* ,表示匹配java包及任何子包下的任何類型; 如匹配java.lang.String、java.lang.annotation.Annotation

+

僅能作為后綴放在類型模式后邊,匹配指定類型的子類型;

   

詳細說明如下:

  • execution:用於匹配方法執行的連接點,配置切入點示例 @Pointcut("execution(切入點表達式)"),切入點表達式格式如下:execution(annotation? modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

切入點表達式示例

說明

public * *(..)

任何公共方法的

@org.lixue.EnableLogTrace public * *(..)

使用 org.lixue.EnableLogTrace 注解標注的任何公共方法

* org.lixue..LogTrace+.*()

org.lixue 包及所有子包下 LogTrace接口及子類型的的任何無參方法

   

  • within:用於匹配指定類型內的方法執行;配置切入點示例 @Pointcut("within(切入點表達式)")

切入點表達式示例

說明

org.lixue..*

在 org.lixue 包或所有子包的任何方法執行

org.lixue..AccountService

在 org.lixue 包或所有子包下 AccountService 類型的任何方法

org.lixue..LogTrace+

在 org.lixue 包或所有子包下 LogTrace 類型及子類型的任何方法

   

  • this:用於匹配當前AOP代理對象類型的執行方法;注意是AOP代理對象的類型匹配,這樣就可能包括引入接口也類型匹配;注意this中使用的表達式必須是類型全限定名,不支持通配符。配置切入點示例:@Pointcut("this(org.lixue.LogTrace)")

切入點表達式示例

說明

org.lixue.LogTrace

AOP代理對象的類型實現了 org.lixue.LogTrace 接口的任何方法

   

  • target:用於匹配當前目標對象類型的執行方法;注意是目標對象的類型匹配,這樣就不包括引入接口也類型匹配;注意target中使用的表達式必須是類型全限定名,不支持通配符;配置切入點示例:@Pointcut("target(org.lixue.LogTrace)")

切入點表達式示例

說明

org.lixue.LogTrace

實現了 org.lixue.LogTrace 接口的任何方法

   

  • args:用於匹配當前執行的方法傳入的參數為指定類型的執行方法;參數類型列表中的參數必須是類型全限定名,通配符不支持;args屬於動態切入點,這種切入點開銷非常大,非特殊情況最好不要使用;注意:匹配傳入的參數類型,不是匹配方法簽名的參數類型。,配置切入點示例@Pointcut("args(java.lang.String,java.lang.String)")

切入點表達式示例

說明

args (java.io.Serializable,..)

任何一個以接受"傳入參數類型為 java.io.Serializable" 開頭,且其后可跟任意個任意類型的參數的方法執行

args(java.lang.String,java.lang.String)

任何一個以接受傳入兩個參數並且類型為 java.lang.String

   

  • @within:用於匹配所以持有指定注解類型內的方法;配置切入點示例 @Pointcut("@within(注解類型)"),注解類型也必須是全限定類型名

切入點表達式示例

說明

org.lixue.EnableLogTrace

使用 org.lixue.EnableLogTrace 注解的任何類型的任何方法必須是在目標對象上聲明這個注解,在接口上聲明的對它不起作用

   

  • @target:用於匹配當前目標對象類型的執行方法,其中目標對象持有指定的注解;配置切入點示例@Pointcut("@target(注解類型)"),注解類型也必須是全限定類型名

切入點表達式示例

說明

org.lixue.EnableLogTrace

使用 org.lixue.EnableLogTrace 注解的任何類型的任何方法必須是在目標對象上聲明這個注解,在接口上聲明的對它不起作用

   

  • @args:用於匹配當前執行的方法傳入的參數持有指定注解的執行;

切入點表達式示例

說明

org.lixue.EnableLogTrace

使用 org.lixue.EnableLogTrace 注解的任何類型的任何方法必須是在目標對象上聲明這個注解,在接口上聲明的對它不起作用

   

  • @annotation:用於匹配當前執行方法持有指定注解的方法,配置切入點示例 @Pointcut("@annotation(注解類型)"),注解類型也必須是全限定類型名

切入點表達式示例

說明

org.lixue.EnableLogTrace

使用 org.lixue.EnableLogTrace 注解的任何方法

   


免責聲明!

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



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