Spring arg系列

切入点指示符中的arg()

两种用法

1、arg(类型, 类型, …)

@After(value = "execution(* ziy.ann.test.B.*(..)) 
&& args(String, int, Object)")
    public void arg2() {
        System.out.println("====增强处理2====");
    }
 /*
 传入一系列类型,表示只有当目标方法的参数类型与之完全匹配才可以匹配该切入点
 */

2、arg(param1, param2,param3,…)

@Before(value = "execution(* ziy.ann.test.B.*(..)) 
&& args(name, age, obj)", argNames = "name, age, obj")
    public void arg(String name, int age, Object obj) {
        System.out.println("====增强处理====");
        System.out.println(name);
    }
/*
传入增强方法的形参名
因为如果AOP代理对象要调用该方法,那就必须传入三个参数,所以
args()、 argNames/arg-names 、Advice方法形参列表,的形参名必须一样,形参列表的类型必须保证能够被赋值
*/

总结:

  1. args()、argNames/arg-names、Advice方法形参列表

1、args():是一个切入点指示符,通常用于限定匹配,可以传入类型或者形参名
args(java.lang.String):限定匹配只有一个参数的方法连接点
args(param1, param2):限定匹配目标方法形参列表有两个参数的方法连接点(并不要求参数名和目标方法的相同)
++++++++++++++++++++++++++++++
2、argNames/arg-names都输入切入点的属性
用于限制args()和Advice形参列表中的参数名和个数达到完全相同,也就是说
其余两个的参数名和个数必须和本属性的参数名、个数、顺序 一模一样
++++++++++++++++++++++++++++++
3、Advice方法参数列表
AOP代理对象如果要调用Advice必须传入能够满足的参数

特殊情况:当Advice形参列表中存在着JoinPoint类型(被Spring自动传参赋值的形参)时,argNames/arg-names可以不用写这个形参(也可以写),但是其他参数必须按照如上规则写。就算写了,args()中也不需要且不能写,因为args()最终功能是来限定匹配的,而不是为了和argNames()相同

@Around(value = "execution(* ziy.ann.test.B.*(..)) 
&& args(name, age, obj)", argNames = "name, age, obj")
public void arg3(ProceedingJoinPoint point, String name, int age, Object obj) throws Throwable {
        System.out.println("arount处理");
        point.proceed(new Object[]{new String("姓名"), 12, new Object()});
        System.out.println(name+" >>>> "+age);
    }

我认为应该保证三个的参数名和个数都相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值