v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

Normal
0
false

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}

参考原文链接: 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 改变argNames和args()内的参数无法按照名称对应上时,测试报错,可见argNames和args()内参数确实按照名称对应.

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

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

情景三:

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

情景三.1

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

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

Spring Aop 注解方式参数传递的更多相关文章

  1. spring aop注解方式与xml方式配置

    注解方式 applicationContext.xml 加入下面配置 <!--Spring Aop 启用自动代理注解 --> <aop:aspectj-autoproxy proxy ...

  2. 转:Spring AOP 注解方式实现的一些“坑”

    使用过Spring AOP的注解方式实现,也入过不少坑,现在做一下记录,希望有同样需求的朋友可以少走弯路 使用之前还是先过一下官方文档吧,至少可以少走弯路,不用担心英文读不懂,其实只看代码例子就能理解 ...

  3. (转)使用Spring的注解方式实现AOP的细节

    http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...

  4. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  5. Spring系列之aAOP AOP是什么?+xml方式实现aop+注解方式实现aop

    Spring系列之aop aop是什么?+xml方式实现aop+注解方式实现aop 什么是AOP? AOP为Aspect Oriented Programming 的缩写,意识为面向切面的编程,是通过 ...

  6. 来一手 AOP 注解方式进行日志记录

    系统日志对于定位/排查问题的重要性不言而喻,相信许多开发和运维都深有体会. 通过日志追踪代码运行状况,模拟系统执行情况,并迅速定位代码/部署环境问题. 系统日志同样也是数据统计/建模的重要依据,通过分 ...

  7. Spring AOP配置方式

    AOP 面向切面编程,允许在 java 应用中的方法调用的前后做一些处理. 本文通过实例介绍两种主要的Spring AOP 配置方式:xml 方式配置,注解方式配置 XML 方式配置 1. 项目包类结 ...

  8. Spring AOP注解为什么失效?90%Java程序员不知道

    使用Spring Aop注解的时候,如@Transactional, @Cacheable等注解一般需要在类方法第一个入口的地方加,不然不会生效. 如下面几种场景 1.Controller直接调用Se ...

  9. Spring AOP注解形式简单实现

    实现步骤: 1:导入类扫描的注解解析器 命名空间:xmlns:context="http://www.springframework.org/schema/context" xsi ...

随机推荐

  1. [javascript-debug-ajax-json]两种不同的json格式数据

    Bug 1: 1. 这里面的 data 只是一维数组{"state":0,"errorCode":0,"data":{"origi ...

  2. PS插件CameraRaw-HSL色彩模式

    一.HSL百度百科 HSL色彩模式是工业界的一种颜色标准,是通过对色相(H).饱和度(S).明度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,HSL即是代表色相,饱和度,明度三 ...

  3. Android---------------Activity的学习

    一.Activity的启动方式 1.显示启动     Intent intent=new Intent(MainActivity.this,SettingActivity.class); //还可以这 ...

  4. KVM虚拟机配置

    KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...

  5. Python-使用PyQT生成图形界面

    1.安装PyQT5以及QT Designer工具包 pip install PyQt5 pip install PyQt5-tools -i http://pypi.douban.com/simple ...

  6. solr 5.5使用 和pyg里 的4.10.3版 部署到tomcat中不一样(不使用内置jetty)

    http://www.cnblogs.com/zhuxiaojie/p/5764680.html

  7. 一个简单文本分类任务-EM算法-R语言

    一.问题介绍 概率分布模型中,有时只含有可观测变量,如单硬币投掷模型,对于每个测试样例,硬币最终是正面还是反面是可以观测的.而有时还含有不可观测变量,如三硬币投掷模型.问题这样描述,首先投掷硬币A,如 ...

  8. 教你通过Node.js漏洞完成渗透测试

    本篇文章较为详细的讲述了通过node.js的已知漏洞来完成渗透测试的过程,介绍了node.js存在的漏洞可以在多种工具下的不同利用方式.因为我认为会对论坛部分web安全新手有所帮助,所以整理到论坛中. ...

  9. GoLang学习控制语句之switch

    基本结构 相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活.它接受任意形式的表达式,例如: switch var1 { case val1: ... case ...

  10. css居中小结

    从css入门就开始接触,无所不在的,一直备受争议的居中问题. css居中分为水平居中和垂直居中,水平居中方式也较为常见和统一,垂直居中的方法就千奇百怪了. 博客原文地址:Claiyre的个人博客 ht ...