SpringAOP的切面执行顺序在Spring4和Spring5中有什么区别?( 二 )

结论在 Spring5 中各个切面的执行顺序如下:
环绕通知 @Around 的逻辑包裹着 @Before、 @AfterReturing、 @AfterThrowing、 @Returing 这些切面 。@After 类比于 finally 块的代码一样在最后执行 。

  • 正常情况
    • @Before --> @AfterReturning --> @After
    • @Around 的 before 逻辑在 @Before 之前
    • @Around 的 after 逻辑在 @After 之后
  • 异常情况
    • @Before --> @AfterThrowing --> @After
    • @Around 的 before 逻辑在 @Before 之前
    • @Around 的 异常 逻辑在 @AfterThrowing 之后
在 Spring4 中各个切面的执行顺序如下:
环绕通知 @Around 的逻辑 并不是 包裹着 @Before、 @AfterReturing、 @AfterThrowing、 @Returing 这些切面 。@After 在 @AfterReturing 或 @AfterThrowing 之前执行 。
  • 正常情况
    • @Before --> @After --> @AfterReturning
    • @Around 的 before 逻辑在 @Before 之前
    • @Around 的 after 逻辑在 @After 之前
  • 异常情况
    • @Before --> @After --> @AfterThrowing
    • @Around 的 before 逻辑在 @Before 之前
    • @Around 的 异常 逻辑在 @AfterThrowing 之前




推荐阅读