天天看點

Spring AOP @Before @Around @After 等 advice 的執行順序

最近在寫項目時用到了AOP的advice來實作通知,後來了解到它在權限控制及其他方面也有很好的利用價值,是以整理了一份AOP各種通知的執行順序

在一個方法隻被一個aspect類攔截時,aspect類内部的 advice 将按照以下的順序進行執行:

正常情況:

Spring AOP @Before @Around @After 等 advice 的執行順序

異常情況:

Spring AOP @Before @Around @After 等 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 {
    // ...
}