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.youkuaiyun.com/liangjiabao5555/article/details/117394866

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lllllLiangjia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值