提問:有4個相同的切點,切一個方法。然後還有4個相同的方法分別執行不同的方法,那麼請問,對於這4個相同的切點,哪個優先級高,以什麼爲標準?
爲什麼要提出這個問題:完全是不小心想到這個問題
最終結果:最終沒有找到源碼依據,完全是靠統計學中的規律學獲得最終結果(博客最後給答案),可行性78%(瞎說的)
相同的數據:相同的類,相同的切點,相同的執行方法,相同的提示語句
不同的數據:聲明順序不同,方法名不同,切點的方法名不同。
猜想:應該和順序,方法名和切點的方法名有關。
。。。。。
省略中間過程,因爲我感覺我要是看這個題目的就只想知道結果,所以我粘貼一個AOP類,有心的同學自己玩,這是springboot的Demo,我給結果算了,哈哈
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class AopTest3 {
private static final Logger logger = Logger.getLogger(AopTest3.class); //日誌,我用的log4j
//配置切點
@Pointcut("execution(* com.sso.controller..*(..))")
public void log1() {
}
@Pointcut("execution(* com.sso.controller..*(..))")
public void log2() {
}
//配置切點
@Pointcut("execution(* com.sso.controller..*(..))")
public void log3() {
}
@Pointcut("execution(* com.sso.controller..*(..))")
public void log4() {
}
@Before("log1()") //前置通知
public void a(JoinPoint joinPoint) {
System.out.println("a".hashCode());
logger.info("log1 先");
}
@Before("log2()") //前置通知
public void b(JoinPoint joinPoint) {
System.out.println("b".hashCode());
logger.info("log2 先");
}
@Before("log3()") //前置通知
public void d(JoinPoint joinPoint) {
System.out.println("d".hashCode());
logger.info("log3 先");
}
@Before("log4()") //前置通知
public void c(JoinPoint joinPoint) {
System.out.println("c".hashCode());
logger.info("log4 先");
}
}
測試結果:相同的切點,執行的優先級和執行方法的方法名有關係,和方法名的hashCode有關,hashCode越小優先級越高。
注意:這個規律不是特別準,只有方法名簡單的時候能看出這個規律,方法名太長的時候就看不出來了。。。。但是總歸來說跟方法名肯定有關係,但是不知道這是不是唯一的標準。