Spring Aop AfterReturning接收返回值

2021年09月15日 阅读数:1
这篇文章主要向大家介绍Spring Aop AfterReturning接收返回值,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

包结构:java

 

Spring.xml测试

 

 

UserDao.javaspa

 

 

测试类Main方法.net

 

 

LogAspect.javaxml

 

测试结果:对象

 

 

 

@AfterReturning标签属性分析:blog

         value值: 能够写Aop的表达式,如execution、args、within等,多个之间使用&& || !做为链接; 也能够使用引用其余Pointcut;get

         pointcut值:和value值用法同样源码

         returning值:给被加强方法返回值取个名字,给后面引用;it

         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方法入参按照名称对应就能够实现后置加强获得入参了.