aop中Pointcut切入点指示符

Posted lllllLiangjia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了aop中Pointcut切入点指示符相关的知识,希望对你有一定的参考价值。

  • execution:用于匹配方法执行的连接点。这是在使用Spring AOP时要使用的主要切入点指示符。
  • within:将匹配限制为某些类型内的连接点(使用Spring AOP时,在匹配类型内声明的方法的执行)。
  • this:在bean引用(Spring AOP代理)是给定类型的实例的情况下,将匹配限制为连接点(使用Spring AOP时方法的执行)。
  • target:在目标对象(代理的应用程序对象)是给定类型的实例的情况下,将匹配限制为连接点(使用Spring AOP时方法的执行)。
  • args:将匹配限制为连接点(使用Spring AOP时方法的执行),其中参数是给定类型的实例。
  • @target:在执行对象的类具有给定类型的注释的情况下,将匹配限制为连接点(使用Spring AOP时方法的执行)。
  • @args:限制匹配的连接点(使用Spring AOP时方法的执行),其中传递的实际参数的运行时类型具有给定类型的注释。
  • @within:将匹配限制为具有给定注释的类型内的连接点(使用Spring AOP时,使用给定注释的类型中声明的方法的执行)。
  • @annotation:将匹配限制在连接点的主题(在Spring AOP中运行的方法)具有给定注释的连接点处。

 

在实例中体现的三种切面覆盖方式

  • 定义使用注解的

   @Pointcut("@annotation(com.example.aopdemo.demo1.config.AuthChecker)")

  • 定义某个方法的

  @Pointcut("execution(* com.example.aopdemo.demo1.controller.DemoController.alive())")

  • 定义某个类的

   @Pointcut("within(com.example.aopdemo.demo1.controller.DemoController))")

 

组合切入点表达式

可以使用&&, ||和组合切入点表达式!。您也可以按名称引用切入点表达式

@Pointcut("execution(public * *(..))")
private void anyPublicOperation()  

@Pointcut("within(com.xyz.myapp.trading..*)")
private void inTrading()  

@Pointcut("anyPublicOperation() && inTrading()")
private void tradingOperation()  
  • anyPublicOperation 如果方法执行连接点代表任何公共方法的执行,则匹配。
  • inTrading 如果交易模块中有方法执行,则匹配。
  • tradingOperation 如果方法执行代表交易模块中的任何公共方法,则匹配。

 

通用切入点定义

execution方法标识

1.任何公共方法的执行

execution(public * *(..))

2.名称以set开头的任何方法执行

execution(* set*(..))

3.AccountService接口定义的任何方法的执行

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

4.service包中任何方法的执行

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

5.service包中或其子包之一中的定义的任何方法的执行

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

within标识

6.service包中的任何连接点

within(com.xyz.service.*)

7.service包或其子包之一中的任何连接点

within(com.xyz.service..*)

其他

8.代理实现AccountService接口中的任何连接点

this(com.xyz.service.AccountService)

9.目标对象实现AccountService接口的任何连接点

target(com.xyz.service.AccountService)

10.任何采用单个参数并且在运行时传递的参数的连接点

args(java.io.Serializable)

11.目标对象带有@Transactional注释的任何连接点

@target(org.springframework.transaction.annotation.Transactional)

12.目标对象的声明类型具有@Transactional注释的任何连接点

@within(org.springframework.transaction.annotation.Transactional)

13.执行方法带有@Transactional注释的任何连接点

@annotation(org.springframework.transaction.annotation.Transactional)

14.任何采用单个参数的联接点,并且传递的参数的运行时类型带有@Classified注释

@args(com.xyz.security.Classified)

15.名为tradeService:的Spring bean上的任何连接点

bean(tradeService)

16.具有与通配符表达式匹配的名称的Spring bean上的任何连接点*Service

bean(*Service)

 

Aop在Spring中的呢?

请阅读https://blog.csdn.net/liangjiabao5555/article/details/117394866

以上是关于aop中Pointcut切入点指示符的主要内容,如果未能解决你的问题,请参考以下文章

Spring AOP切入点表达式

Spring的AOP AspectJ切入点语法详解(转)

spring中自定义注解

Spring AOP中@Aspect拦截介绍(二)

Spring切点表达式

Spring AOP的切入点表达式