Spring AOP之通知類別執行順序

以下內容來源:https://jinnianshilongnian.iteye.com/blog/1423489

如果我們有多個通知想要在同一連接點執行,那執行順序如何確定呢?Spring AOP使用AspectJ的優先級規則來確定通知執行順序。總共有兩種情況:同一切面中通知執行順序、不同切面中的通知執行順序。

首先讓我們看下
1) 同一切面中通知執行順序:如圖6-6所示。
在這裏插入圖片描述
圖6-6 同一切面中的通知執行順序

而如果在同一切面中定義兩個相同類型通知(如同是前置通知或環繞通知(proceed之前))並在同一連接點執行時,其執行順序是未知的,如果確實需要指定執行順序需要將通知重構到兩個切面,然後定義切面的執行順序。
在這裏插入圖片描述
2)不同切面中的通知執行順序:當定義在不同切面的相同類型的通知需要在同一個連接點執行,如果沒指定切面的執行順序,這兩個通知的執行順序將是未知的。

如果需要他們順序執行,可以通過指定切面的優先級來控制通知的執行順序。

Spring中可以通過在切面實現類上實現org.springframework.core.Ordered接口或使用Order註解來指定切面優先級。在多個切面中,Ordered.getValue()方法返回值(或者註解值)較小值的那個切面擁有較高優先級,如圖6-7所示。

圖6-7 兩個切面指定了優先級
在這裏插入圖片描述

對於@AspectJ風格和註解風格可分別用以下形式指定優先級:
在這裏插入圖片描述

在此我們不推薦使用實現Ordered接口方法,所以沒介紹,示例代碼在cn.javass.spring.chapter6. OrderAopTest文件中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章