zoukankan      html  css  js  c++  java
  • Spring Aop 注解方式参数传递

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

    包结构:

    Spring配置文件:

     

    Service层文件

     

    测试类:

    切面文件:

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

     

    测试结果:

    分析:

     

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

     

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

     

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

     

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

     

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

     

            

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

     

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

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

     

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

     

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

     

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

        

    情景三:

     

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

     

      情景三.1

     

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

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

      

  • 相关阅读:
    获取资源文件 r.drawable中的图片转换为drawable、bitmap
    Android 启动白屏或者黑屏闪现解决
    Android应用截图方法
    史上最全的变量、作用域和内存问题
    RunLoop总结:RunLoop的应用场景(四)
    poj3436 ACM Computer Factory, 最大流,输出路径
    android开发——从相冊中选择图片不裁剪
    <html>
    poj3073
    poj 2482 Stars in Your Window (线段树扫描线)
  • 原文地址:https://www.cnblogs.com/lvbinbin2yujie/p/10182382.html
Copyright © 2011-2022 走看看