Spring Aop AfterReturning接收返回值


包結構:

 

Spring.xml

 

 

UserDao.java

 

 

測試類Main方法

 

 

LogAspect.java

 

測試結果:

 

 

 

@AfterReturning標簽屬性分析:

         value值: 可以寫Aop的表達式,如execution、args、within等,多個之間使用&& || !作為連接; 也可以使用引用其他Pointcut;

         pointcut值:和value值用法一樣

         returning值:給被增強方法返回值取個名字,給后面引用;

         argNames值:方法入參的名字,Spring4.2.x測試時候發現寫不寫都可以實現Aop,具體看下面測試.

 

         如果只需要記錄方法返回值的話,只需要配置returning屬性,方法入參配置上對應返回值類型或其父類即可,寫Object應該肯定沒問題吧;

 

         知識點1.returning屬性的值和增強方法的入參是按照名稱來匹配;

         當增強方法入參名稱和returning不一致時,就會拋出異常Returning argument name 'val' was not bound in advice arguments

 

        

        

         知識點2. 增強方法入參不能出現多余(JoinPoint不算多余),否則會匹配不上; 如果想要獲取被增強方法入參,方式有兩種,下面有介紹.

 

 

         知識點3. 增強方法入參類型必須是 被增強方法返回值類型或者父類,否則增強方法無法執行; void類型的方法返回值是null,可以使用Object類型來接收

    

         知識點3查看源碼可以得到解釋, AspectJAfterReturningAdvice的afterReturning會先判斷類型是否匹配來決定執行不執行后置增強;

 

 

知識點4. 看到博文下在討論能否改變方法返回值類型,下面討論給出了答案:

String類型的無法改變返回值類型,而對象類型的可以調用set方法將返回值屬性改變;

討論地址:https://blog.csdn.net/owen_william/article/details/50812771#commentsedit

 

  測試如下:

         ResultStr.java

     

 

UserDao.java

 

 

增強類和測試方法

 

 

知識點5.獲取被增強方法入參的幾種方式:

方式一.使用JoinPoint獲取入參

 

        

方式二. 注解添加寫argNames屬性值

 

分析: 被增強方法addUser我們用A來簡稱,增強方法getReturning用B來簡稱, A的入參和B的args()內參數按照順序來對應;  args()內參數+returning值  與argnames中參數按照名稱來對應,  而argNames的值與B入參按照順序來對應,這點從下面名稱不匹配可以證實;

 注意:argNames中一定要寫returning的值

 

 

方式三.注解不寫argNames屬性值

 

 

分析:不寫argNames屬性值時候,  addUser仍然簡稱A方法,getReturning方法簡稱B方法, A方法的入參和B方法的args()括號內參數按照順序對應, args()括號內參數和B方法入參按照名稱對應就可以實現后置增強得到入參了.

 

 


免責聲明!

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



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