zoukankan      html  css  js  c++  java
  • 转 Spring AOP @Before @Around @After 等 advice 的执行顺序

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

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

    正常情况: 
    one-ok


    异常情况: 
    one-exception

    情况二: 同一个方法被多个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不会被触发。

  • 相关阅读:
    Java 反射
    类中静态/普通/构造初始化顺序
    计算机世界中的0和1
    Java并发练习
    HashMap底层
    HashMap 与 Hashtable 的区别
    为什么重写了equals() 就要重写hashcode()
    干货型up主
    JSP页面元素
    重定向与请求转发的区别
  • 原文地址:https://www.cnblogs.com/bluedeblog/p/7522355.html
Copyright © 2011-2022 走看看