而如果我们刚才定义的方法是写在 TestController 之下的,那么就不符合@Around
方法的匹配规则了,也不符合@before
和@after
的注解规则,因此不会匹配任何一个规则,如果需要匹配特定的方法,可以用自定义的注解形式或者特性controller下的方法
①:特性的注解形式
@Pointcut("@annotation(com.lmx.blog.annotation.RedisCache)")
@Order(1) // Order 代表优先级,数字越小优先级越高
public void annoationPoint(){};
然后在所需要的方法上加入@RedisCache
注解,在@Before
,@After
,@Around
等方法上添加该切点的方法名(“annoationPoint()
”),如果有多个注解需要匹配则用||
隔开
②:指定controller或者指定controller下的方法
@Pointcut("execution(public * com.lmx.blog.controller.UserController.*(..))")
@Order(2)
public void pointCut(){};
该部分代码是指定了com.lmx.blog.controller
包下的UserController下的所有方法 。
第一个*
代表的是返回类型不限
第二个*
代表的是该controller下的所有方法,(..)
代表的是参数不限
总结
当方法符合切点规则不符合环绕通知的规则时候,执行的顺序如下
@Before→@After→@AfterRunning(如果有异常→@AfterThrowing)
当方法符合切点规则并且符合环绕通知的规则时候,执行的顺序如下
@Around→@Before→@Around→@After执行 ProceedingJoinPoint.proceed() 之后的操作→@AfterRunning(如果有异常→@AfterThrowing)
作者:Leonis丶L https://blog.csdn.NET/lmx125254/article/details/84398412
推荐阅读
- Spring Boot+Nacos+gRPC,一个区别于 OpenFeign 的微服务通信方案!
- Java 注解基础知识,掌握的人不足10%
- 在 SpringBoot 中使用 Spring AOP 实现接口鉴权
- SpringBoot中如何实现限流,这种方式才叫优雅!
- SpringBoot中使用PostgreSQL数据库
- SpringBoot对SpringMVC的自动配置,你知道多少?
- Go、Spring Boot、 Elixir 以及Helidon 微服务框架性能测试对比
- Spring Boot启动了几个IoC容器?如何证明?
- spring是什么(简述spring加载过程)
- 阿里一面:说一说Java、Spring、Dubbo三者SPI机制的原理和区别