转 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