最近在寫項目時用到了AOP的advice來實作通知,後來了解到它在權限控制及其他方面也有很好的利用價值,是以整理了一份AOP各種通知的執行順序
在一個方法隻被一個aspect類攔截時,aspect類内部的 advice 将按照以下的順序進行執行:
正常情況:
異常情況:
當然,上面僅是被一個Aspect類攔截,如果是被多個Aspect類攔截呢?
在預設情況下,不同的aspect執行順序是随機的,我們可以通過實作org.springframework.core.Ordered接口,實作它的getOrder()方法或給aspect添加@Order注解,該注解全稱為:org.springframework.core.annotation.Order來使其變的有序,不管采用上面的哪種方法,都是值越小的 aspect 越先執行
比如我們給兩個aspect分别添加@Order注解
@Order(5)
@Component
@Aspect
public class Aspect1 {
// ...
}
@Order(6)
@Component
@Aspect
public class Aspect2 {
// ...
}