首页 > 编程语言 > 详细

Spring--AOP、通知的执行顺序

时间:2020-12-20 23:15:48      阅读:205      评论:0      收藏:0      [点我收藏+]

AOP执行顺序

如果我们在同一个方法自定义多个AOP,我们如何指定他们的执行顺序呢?

可以通过指定order,order越小越是最先执行

配置AOP执行顺序的三种方式:

通过实现Ordered接口

@Component 
@Aspect 
@Slf4j 
public class MessageQueueAopAspect1 implements Ordered{@Override 
  public int getOrder() { 
    // TODO Auto-generated method stub 
    return 2; 
  } 
   
}

配置文件配置

<aop:config expose-proxy="true"> 
  <aop:aspect ref="aopBean" order="0">  
    <aop:pointcut id="testPointcut" expression="@annotation(xxx.xxx.xxx.annotation.xxx)"/>  
    <aop:around pointcut-ref="testPointcut" method="doAround" />  
    </aop:aspect>  
</aop:config>

@Order注解指定

@Component
@Aspect
@Slf4j
@Order(1) 
public class MessageQueueAopAspect1{  
  ... 
}

技术分享图片

 技术分享图片

通知的执行顺序

Advice :通知,在切面的某个特定的连接点(Join point)上执行的操作。

通知分为:

前置通知:在原来方法之前执行。

后置通知:在原来的方法之后执行。特点:可以得到被增强方法的返回值。

环绕通知:在方法之前和方法之后执行。

异常通知:目标方法出现异常执行,如果方法没有异常,不会执行。特点:可以获得异常的信息。

最终通知:指的是无论是否有异常,总是被执行。

 示例

创建两个自定义注解

技术分享图片

 自定义注解2

 技术分享图片

 定义两个实现Ordered接口的切面,切面1的order较小,先执行

技术分享图片

切面2

技术分享图片

 PostMan接口调用

 技术分享图片

Debug过程

 技术分享图片

 F8下一步,最终结果如下

技术分享图片

 总结

spring aop就是一个同心圆,要执行的方法为圆心,最外层的order最小。从最外层按照AOP1、AOP2的顺序依次执行doAround方法,doBefore方法。然后执行method方法,最后按照AOP2、AOP1的顺序依次执行doAfter、doAfterReturn方法。也就是说对多个AOP来说,先before的,一定后after。

技术分享图片

一个切面通知的顺序

技术分享图片

 两个切面通知的顺序

技术分享图片

 

Spring--AOP、通知的执行顺序

原文:https://www.cnblogs.com/liaowenhui/p/14164163.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!