首页 > 编程知识 正文

java获取线程返回值,springaop实现原理

时间:2023-05-06 06:58:53 阅读:168556 作者:4744

包结构:

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 )括号内参数

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。