1. 程式人生 > >@order 通知執行順序

@order 通知執行順序

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就是面向切面程式設計,什麼是切面,畫一個圖來理解下:

由此得出:spring aop就是一個同心圓,要執行的方法為圓心,最外層的order最小。從最外層按照AOP1、AOP2的順序依次執行doAround方法,doBefore方法。然後執行method方法,最後按照AOP2、AOP1的順序依次執行doAfter、doAfterReturn方法。也就是說對多個AOP來說,先before的,一定後after。

如果我們要在同一個方法事務提交後執行自己的AOP,那麼把事務的AOP order設定為2,自己的AOP order設定為1,然後在doAfterReturn裡邊處理自己的業務邏輯。