springboot AOP對於相同切點,相同的方法去執行,切點的優先級以什麼爲準

提問:有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越小優先級越高。

注意:這個規律不是特別準,只有方法名簡單的時候能看出這個規律,方法名太長的時候就看不出來了。。。。但是總歸來說跟方法名肯定有關係,但是不知道這是不是唯一的標準。

 

 

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