转 Spring AOP @Before @Around @After 等 advice 的执行顺序

本文内容纲要:

- 情况一: 一个方法只被一个Aspect类拦截

- 情况二: 同一个方法被多个Aspect类拦截

- 注意点

转自:http://blog.csdn.net/rainbow702/article/details/52185827

情况一: 一个方法只被一个Aspect类拦截

正常情况:


异常情况:

情况二: 同一个方法被多个Aspect类拦截

方法有两种:

  • 实现org.springframework.core.Ordered接口,实现它的**getOrder()**方法

  • 给aspect添加**@Order**注解,该注解全称为:org.springframework.core.annotation.Order

    @Order(5)

    @Component

    @Aspect

    public class Aspect1 {

    // ...

    }

    @Order(6)

    @Component

    @Aspect

    public class Aspect2 {

    // ...

    }

注意点

  • 如果在同一个 aspect 类中,针对同一个 pointcut,定义了两个相同的 advice(比如,定义了两个 @Before),那么这两个 advice 的执行顺序是无法确定的,哪怕你给这两个 advice 添加了 @Order 这个注解,也不行。这点切记。
  • 对于**@Around**这个advice,不管它有没有返回值,但是必须要方法内部,调用一下 **pjp.proceed();**否则,Controller 中的接口将没有机会被执行,从而也导致了 @Before这个advice不会被触发。

本文内容总结:情况一: 一个方法只被一个Aspect类拦截,情况二: 同一个方法被多个Aspect类拦截,注意点,

原文链接:https://www.cnblogs.com/bluedeblog/p/7522355.html

以上是 转 Spring AOP @Before @Around @After 等 advice 的执行顺序 的全部内容, 来源链接: utcz.com/z/362916.html

回到顶部