1. 程式人生 > >Aop多個切面切同一個地方的優先順序問題

Aop多個切面切同一個地方的優先順序問題

    以前就想過這個問題,如果多個切面切了同一個地方,那麼多個切面的優先順序是怎麼樣的呢,只不過這個念頭以前在大腦裡面一閃而過,沒有深究,今天看了一個視訊講到了這個問題。我才知道任何細節其實背後都隱藏著知識點,偉大的spring其實早就想到了這一點。它給我們提供了一些解決辦法讓我們來管理多個切面切同一個地方時的優先順序。

  第一種辦法是用@Order()註解,括號裡面可以填寫一個>=0的整數,數字越小,則優先順序越大。

  如下所示

@Component
@Aspect
@Order(1)
public class FirstAspect{
	
	@Before(value="execution(* com.xj.mvc.service..*.*(..))")
	public void befor(){
		System.out.println("firstAspect");
	}

}

第二種辦法就是實現Order介面,實現getOrder方法,同樣的返回一個>=0的整數,數字越小,則優先順序越大.

@Component
@Aspect
public class FirstAspect implements Ordered{
	
	@Before(value="execution(* com.xj.mvc.service..*.*(..))")
	public void befor(){
		System.out.println("firstAspect");
	}

	public int getOrder() {
		return 1;
	}

}
通過這兩種方法就可以控制aop的優先順序.