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


    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。

    一个切面通知的顺序

     两个切面通知的顺序

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。

    扫描下方二维码关注我,您会收到更多优质文章推送。

  • 相关阅读:
    导出CSV乱码
    php让一个数组按照另外一个数组的键名进行排序
    电脑没有网
    Android抓包方法(转)
    封装curl的get和post请求
    JavaScript动态加载CSS和JS文件
    压缩视频之后网页上只有声音,没有图像
    php BCMath高精度计算
    非table结构数据导入excel
    如何将页面上的数据导入excel中
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/14164163.html
Copyright © 2020-2023  润新知