Spring Aop 注解方式參數傳遞


參考原文鏈接: https://my.oschina.net/longfong/blog/805410

包結構:

 

Spring配置文件:

 

Service層文件

 

測試類:

切面文件:

         情景一:  注解不包含argNames屬性

 

測試結果:

 

分析:

 

 

         情景一.1 當增強方法上參數名稱與arg括號內參數名稱不對應時,測試報錯;

 

         情景一.2 當增強方法上參數名稱對應上,但是類型對應不上時,測試發現增強無效;

 

 情景一.3 當增強方法參數名稱與類型對應上,但是順序顛倒時,測試成功

 

         情景一.4 當增強方法參數多余或少於arg內參數時,測試報錯

 

 

情景一情況總結: 在沒有標注argNames的情況下,arg內參數是按照名稱與待增強方法(本例中的addUser)對應,順序隨意,且參數個數要符合待增強方法;  切面中的方法入參個數以及名稱、類型需要與arg內參數相匹配才可以,但是順序可以打亂;也可以使用JoinPoint方法獲取入參(前提是JoinPoint一定是第一個參數).

 

        

情景二: 注解中包含argNames屬性;

 

分析:args()括號內的為按照順序和待增強方法對應,argNames中的為按照名字和args()內對應,而切面的方法又和argNames的參數按照順序對應;

  情景二.1 改變切面中方法參數,argNames中參數保持名稱不一致時,測試成功,可見argNames參數和增強方法中參數確實是按照順序對應,而非名稱對應;

 

情景二.2 改變argNamesargs()內的參數無法按照名稱對應上時,測試報錯,可見argNamesargs()內參數確實按照名稱對應.

 

 情景二.3 改變切面增強方法入參的順序時,測試發現增強沒起作用,再次驗證了argNames參數和增強方法入參是按照順序來對應的;

 

  情景二.4 JoinPoint用法: JointPoint必須放在參數第一個,其他位置都會報錯,因為底層判斷的時候只檢查第一個參數是否是JoinPoint或者ProceedingJoinPoint或者另一種類型;

    

情景三:

 

 

分析:PointCut注解下方法入參需要與增強方法入參一致,類型順序都要一樣;Pointcut注解args()argNames不一定非要都出現;

 

  情景三.1

 

  分析:argNamesargs()不一定需要成對出現,如下情形時:Pointcutarg按照順序和 被增強方法(addUser)對應,arg()內參數和Pointcut下方法入參按照名稱對應;

切面中的方法(beginLog)的注解上的test1(a,b)按照順序和Pointcutarg()內參數對應,切面中的方法(beginLog)入參和注解上的test1(a,b)入參按照名稱對應;

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM