Spring AOP 通知 同一 Aspect 和不同 Aspect 中通知的执行顺序

AOP 的通知类型

同一切面内通知的执行顺序

AOP 的通知共五种,同一切面内我们直接按照执行顺序介绍:

1.环绕通知A
@Around
环绕通知比较特殊,在环绕通知里面我们需要手动调用目标函数,所以我们可以把环绕通知的执行顺序看作:环绕通知A(目标函数执行之前的语句) -> 目标函数 -> 环绕通知B(目标函数执行之后的语句)

2.前置通知
@Before

此处执行目标函数

3.环绕通知B
@Around

4.后置通知
@After

5.后置返回通知 / 后置异常通知
@AfterRunning / @AfterThrowing
假如目标函数没有发生异常,执行了 return 语句,则执行后置返回通知,如果发生异常则执行后置异常通知。严谨的说,如果抛出异常才执行行后置异常通知,若是函数内捕获异常,外部调用函数是感知不到的。

不同切面间的执行顺序

如果知道上面的执行顺序,不同 Aspect 切面的执行顺序很好理解。
首先根据 @Order 注解,或者 xml 中的顺序,先进入到顺序靠前的切面。
然后我们只需要把上面执行顺序中执行目标函数位置替换为第二个切面的执行顺序,同理,第三个切面的执行位置,就是把第二个切面的执行顺序里面执行目标函数替换即可,以此类推。

需要注意的是异常的抛出,我们的环绕通知是有能力捕获目标函数异常并且不抛出的,如果捕获并且不抛出,会触发后置返回通知而不会触发后置异常通知,同时也会影响其他切面的执行。所以我们捕获处理后,还要抛出去。

发布了21 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/SudaDays/article/details/99636954