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

AOP 的通知类型

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

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

1.环绕通知A
@Around
环绕通知比较特殊,在环绕通知里面咱们须要手动调用目标函数,因此咱们能够把环绕通知的执行顺序看做:环绕通知A(目标函数执行以前的语句) -> 目标函数 -> 环绕通知B(目标函数执行以后的语句)svg

2.前置通知
@Before函数

此处执行目标函数xml

3.环绕通知B
@Aroundit

4.后置通知
@Afterwebkit

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

不一样切面间的执行顺序

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

须要注意的是异常的抛出,咱们的环绕通知是有能力捕获目标函数异常而且不抛出的,若是捕获而且不抛出,会触发后置返回通知而不会触发后置异常通知,同时也会影响其余切面的执行。因此咱们捕获处理后,还要抛出去。di