AOP 之 6.6 通知参数
来源:互联网 发布:linux 启动进程 start 编辑:程序博客网 时间:2024/05/21 11:29
转自涛哥:http://jinnianshilongnian.iteye.com/blog/1420691
@Before(value="execution(* test(*)) && args(param)", argNames="param") public void before1(String param) { System.out.println("===param:" + param); }
切入点表达式execution(* test(*)) && args(param) :
1)首先execution(* test(*))匹配任何方法名为test,且有一个任何类型的参数;
2)args(param)将首先查找通知方法上同名的参数,并在方法执行时(运行时)匹配传入的参数是使用该同名参数类型,即java.lang.String;如果匹配将把该被通知参数传递给通知方法上同名参数。
其他指示符(除了execution和bean指示符)都可以使用这种方式进行参数绑定。
在此有一个问题,即前边提到的类似于【3.1.2构造器注入】中的参数名注入限制:在class文件中没生成变量调试信息是获取不到方法参数名字的。
所以我们可以使用策略来确定参数名:
1、如果我们通过“argNames”属性指定了参数名,那么就是要我们指定的;
@Before(value=" args(param)", argNames="param") //明确指定了 public void before1(String param) { System.out.println("===param:" + param); }
2、如果第一个参数类型是JoinPoint、ProceedingJoinPoint或JoinPoint.StaticPart类型,应该从“argNames”属性省略掉该参数名(可选,写上也对),这些类型对象会自动传入的,但必须作为第一个参数;
@Before(value=" args(param)", argNames="param") //明确指定了 public void before1(JoinPoint jp, String param) { System.out.println("===param:" + param); }
3、如果“class文件中含有变量调试信息”将使用这些方法签名中的参数名来确定参数名;
@Before(value=" args(param)") //不需要argNames了 public void before1(JoinPoint jp, String param) { System.out.println("===param:" + param); }
4、如果没有“class文件中含有变量调试信息”,将尝试自己的参数匹配算法,如果发现参数绑定有二义性将抛出AmbiguousBindingException异常;对于只有一个绑定变量的切入点表达式,而通知方法只接受一个参数,说明绑定参数是明确的,从而能配对成功
@Before(value=" args(param)") public void before1(JoinPoint jp, String param) { System.out.println("===param:" + param); }
5、以上策略失败将抛出IllegalArgumentException。
- AOP 之 6.6 通知参数
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- 【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3
- AOP之通知顺序
- AOP编程之前置通知
- spring之AOP---后置通知
- Spring AOP配置及通知参数
- spring AOP 通知参数的传递
- Spring 配置使用 - AOP 通知参数
- spring aop五种通知及通知中传递参数!
- Spring Framework中的AOP之around通知
- Spring之AOP(二)---前置通知
- postMessage实现跨域密码代添
- 未完成题目
- Maven常用命令
- Oracle中的正则替换【REGEXP_REPLACE】和正则like【REGEXP_like】
- WebPack
- AOP 之 6.6 通知参数
- MySQL 事务没有提交导致 锁等待 Lock wait timeout exceeded
- AngularJs页面数据不加载的解决思路
- Android 让EditText失去焦点避免自动弹出输入法
- js中return的用法
- Atcoder 056 D 贪心+二分
- 分治法:求给定数组A[1:n]的最大连续子数组
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- 【专访】户外决策将成为您的第三只眼睛-艾宇