包结构:
Spring.xml
UserDao.java
测试类Main方法
LogAspect.java
测试结果:
@AfterReturning标签属性分析:
value值:可以写出execution、args、within等Aop的表达式,可以在多个之间进行||! 作为连接; 也可以引用其他Pointcut;
pointcut值:的使用方式与value值相同
returning值:被命名为扩展方法的返回值,以在后面引用;
argNames值:方法是参加的名字,在Spring4.2.x测试的时候,发现写不写都可以实现Aop。 具体请看以下测试。
如果只需要记录方法的返回值,则只需设置returning属性,并在方法条目配置中对应于返回值类型或其父类,写Object就没问题了。
知识点1.returning属性值与扩展方法条目按名称匹配;
如果扩展方法的条目名称和returning不匹配,则会抛出异常returningargumentname ' val ' wasnotboundinadvicearguments
知识点2 .如果想用不匹配的强化方式参与,认为增强方法(参与者不能有多余的(JoinPoint不是多余的),方式有两种,介绍如下。
知识点3 .扩展方法的条目类型必须是扩展方法的返回类型或父类。 否则,无法执行扩展方法; void类型的方法返回值为null,可以使用Object类型接收
知识点3查看源代码可以解释。 AspectJAfterReturningAdvice的afterReturning首先判断类型是否匹配,然后决定是否执行后置扩展;
知识点4 .看到博文下讨论是否可以改变方法的返回值类型,在以下讨论中给出了答案:
String类型不能更改返回类型,但对象类型可以调用set方法来更改返回的属性。
讨论地址:https://blog.csdn.net/Owen _ William/article/details/50812771 # comments edit
测试以下:
ResultStr.java
UserDao.java
扩展类和测试方法
知识点5 .获取通过强化方式参与的几种方式:
使用方式JoinPoint获取参与
方法2 .在注释中添加argNames属性值
分析:被增强方法addUser我们简称a,增强方法getReturning简称b,a的参与和b的args () )内参数按顺序对应; args ) )内的参数returning的值和argnames内的参数按名称顺序对应,argnames的值和b条目按顺序对应,可以根据以下名称不一致来确认;
请务必在:argNames中填写returning的值
方式3 .注释不写argNames属性值
如果分析:不写argNames属性值,则addUser仍然将a方法,getReturning方法简称为b方法,将a方法条目和b方法的args (括号内参数按顺序对应,args )括号内参数