码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Aop 注解方式参数传递

时间:2018-12-27 00:33:31      阅读:481      评论:0      收藏:0      [点我收藏+]

标签:orm   方法   不一致   normal   结构   测试   text   技术   无效   

参考原文链接: https://my.oschina.net/longfong/blog/805410

包结构:

技术分享图片

 

Spring配置文件:

 技术分享图片

Service层文件

 技术分享图片

测试类:

技术分享图片

切面文件:

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

 技术分享图片

测试结果:

技术分享图片

 

分析:

 技术分享图片

 

         情景一.1 当增强方法上参数名称与arg括号内参数名称不对应时,测试报错;

 技术分享图片

         情景一.2 当增强方法上参数名称对应上,但是类型对应不上时,测试发现增强无效;

 技术分享图片

 情景一.3 当增强方法参数名称与类型对应上,但是顺序颠倒时,测试成功

 技术分享图片

         情景一.4 当增强方法参数多余或少于arg内参数时,测试报错

 技术分享图片

 

情景一情况总结: 在没有标注argNames的情况下,arg内参数是按照名称与待增强方法(本例中的addUser)对应,顺序随意,且参数个数要符合待增强方法;  切面中的方法入参个数以及名称、类型需要与arg内参数相匹配才可以,但是顺序可以打乱;也可以使用JoinPoint方法获取入参(前提是JoinPoint一定是第一个参数).

 

        

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

 技术分享图片

分析:arg()括号内的为按照顺序和待增强方法对应,argNames中的为按照名字和arg()内对应,而切面的方法又和argNames的参数按照顺序对应;

技术分享图片

  情景二.1 改变切面中方法参数,argNames中参数保持名称不一致时,测试成功,可见argNames参数和增强方法中参数确实是按照顺序对应,而非名称对应;

 技术分享图片

情景二.2 改变argNamesarg()内的参数无法按照名称对应上时,测试报错,可见argNamesarg()内参数确实按照名称对应.

 技术分享图片

 情景二.3 改变切面增强方法入参的顺序时,测试发现增强没起作用,再次验证了argNames参数和增强方法入参是按照顺序来对应的;

 技术分享图片

  情景二.4 JoinPoint用法: JointPoint必须放在参数第一个,其他位置都会报错,因为底层判断的时候只检查第一个参数是否是JoinPoint或者ProceedingJoinPoint或者另一种类型;

     技术分享图片

情景三:

 技术分享图片

 

分析:PointCut注解下方法入参需要与增强方法入参一致,类型顺序都要一样;Pointcut注解arg()argNames不一定非要都出现;

 

  情景三.1

 技术分享图片

  分析:argNamesarg()不一定需要成对出现,如下情形时:Pointcutarg按照顺序和 被增强方法(addUser)对应,arg()内参数和Pointcut下方法入参按照名称对应;

切面中的方法(beginLog)的注解上的test1(a,b)按照顺序和Pointcutarg()内参数对应,切面中的方法(beginLog)入参和注解上的test1(a,b)入参按照名称对应;

  

Spring Aop 注解方式参数传递

标签:orm   方法   不一致   normal   结构   测试   text   技术   无效   

原文地址:https://www.cnblogs.com/lvbinbin2yujie/p/10182382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!