@order 通知执行顺序

时间:2024-05-19 11:08:39

Spring通知执行顺序

@order注解

Spring 4.2 利用@Order控制配置类的加载顺序

  1. 无异常情况
    • 所有通知order一样,执行顺序:around start -> before ->around start -> afterreturning -> after
    • before.order < around.order,执行顺序: before -> around start
    • afterreturning.order > around.order,执行顺序:afterreturning -> around end
    • after.order > around.order,执行顺序:after -> around end
    • after.order >afterreturning.order,执行顺序: after -> afterreturning
  2. 异常情况
    • 所有通知order一样,执行顺序:around start -> before -> afterthrowing -> after
    • before.order < around.order,执行顺序: before -> around start
    • after.order > afterthrowing .order,执行顺序:after -> afterthrowing

order越小越是最先执行,但更重要的是最先执行的最后结束。
这个不难理解,spring AOP就是面向切面编程,什么是切面,画一个图来理解下:

@order 通知执行顺序

由此得出:spring aop就是一个同心圆,要执行的方法为圆心,最外层的order最小。从最外层按照AOP1、AOP2的顺序依次执行doAround方法,doBefore方法。然后执行method方法,最后按照AOP2、AOP1的顺序依次执行doAfter、doAfterReturn方法。也就是说对多个AOP来说,先before的,一定后after。

如果我们要在同一个方法事务提交后执行自己的AOP,那么把事务的AOP order设置为2,自己的AOP order设置为1,然后在doAfterReturn里边处理自己的业务逻辑。