@order 通知執行順序
阿新 • • 發佈:2019-01-07
Spring通知執行順序
@order註解
Spring 4.2 利用@Order控制配置類的載入順序
- 無異常情況
- 所有通知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
- 異常情況
- 所有通知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裡邊處理自己的業務邏輯。