TECH NOTES / Java 与 Spring
Spring AOP:通知的执行顺序
原笔记 2022-02-23 · 整理于 2026-10-05
整理 Spring AOP 多个切面与通知的调用顺序,结合图示理解嵌套执行。
版本说明:通知顺序的结论需结合 Spring 版本、切面优先级及是否抛出异常判断。图中是原笔记的执行示意;同一切面内相同类型的多个通知不应依赖源码声明顺序。
通知的执行顺序
Advice :通知,在切面的某个特定的连接点(Join point)上执行的操作。
通知分为:
前置通知: 在原来方法之前执行。
后置通知: 在原来的方法之后执行。特点:可以得到被增强方法的返回值。
环绕通知: 在方法之前和方法之后执行。
异常通知: 目标方法出现异常执行,如果方法没有异常,不会执行。特点:可以获得异常的信息。
最终通知: 指的是无论是否有异常,总是被执行。

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

一个切面通知的顺序

两个切面通知的顺序

参考: