在 Spring 5.0(对应 Spring Boot 2.0)及之后的版本中,Spring 对 AOP 的底层实现进行了重构,使其完全遵循了 AspectJ 的标准语义。 这一改动解决之前版本(Spring 4 及更早)中通知执行顺序反直觉的问题。在 Spring 5 之后,AOP 通知的执行顺序呈现出完美的“同心圆(洋葱)模型”。 以下是具体的执行顺序详解: --- 一、 同一个切面(Aspect)内的通知执行顺序 假设我们在同一个切面类中定义了 、、、 和 。 1. 正常返回(无异常)的情况: 1. (环绕通知: 之前的代码) 2. (前置通知) 3. [ 目标方法执行 ] 4. (返回通知) 5. (后置/最终通知,相当于 ) 6. (环绕通知: 之后的代码) > ⚠️ 与 Spring 4 的重要区别: > 在 Spring 4 中,正常执行时 会在 之前执行。 > 在 Spring 5 中,纠正了这一顺序:先触发返回值 ,再执行类似 finally 的 。 2. 抛出异常的情况: 1. (环绕通知: 之前的代码) 2. (前置通知) 3. [ 目标方法执行抛出异常 ]...