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切入点指示符的主要内容,如果未能解决你的问题,请参考以下文章