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; 
  } 
   
}

配置文件配置

 
    
      
      
      

@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。

一个切面通知的顺序

 两个切面通知的顺序

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

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