前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring AOP中 args和arg-names的区别

Spring AOP中 args和arg-names的区别

作者头像
老白
发布2018-03-19 16:22:14
1.6K0
发布2018-03-19 16:22:14
举报
文章被收录于专栏:架构之路

这两天在看aop aspectj的各种语法,发现里面有两个概念 args和arg-names很容易混淆,网上也基本没说清楚,所以就动手试了一下,发现还是自己试试比较好理解

先说结论:

args是和execution用在一起,用来过滤要被代理的方法的,如果不和arg-names一起用,那么用法是args(类名,类名...)。 如果和arg-names(参数名1,参数名2...)一起用,那么用法是args(参数1,参数2...),其中,参数1和参数2的类型由arg-names所代表的方法的参数确定

arg-names是和代理方法一起用的(就是你要加在被代理的方法之前或者之后的那个方法) arg-names(参数名1,参数名2...) 其中的参数名1 参数名2 和 代理方法的参数名是一一对应的

至于@args,是用于参数上有指定注解的,反而比较好分辨

举个例子

先定义一个要被代理的类:

代码语言:javascript
复制
public interface someInterface{
 public void targetFunction(String st, Integer in);
}

public class target implements someInterface{
    public void targetFunction(String st, Integer in){
    System.out.println("我是被代理类");
  }
}

然后是定义代理类

代码语言:javascript
复制
public class aspect{
   public void aspectFunction(Integer in, String st){
代码语言:javascript
复制
    System.out.println("我是代理类,有两个参数:"+ st +" "+ in);
  } 
}

然后定义xml文件:

代码语言:javascript
复制
<bean id="targetClass" class="target"/>

<bean id="aspectClass" class="aspect"/>

<aop:config>
    
    <aop:aspect id = "asp1" ref="aspectClass">
        <aop:after pointcut="execution(* *.targetFunction.(..) and args(String,Integer))" method="aspectFunction" />
    </aop:aspect>
    
    <aop:aspect id = "asp2" ref="aspectClass">
        <aop:after pointcut="execution(* *.targetFunction.(..) and args(st,in))" method="aspectFunction" arg-names="st,in"/>
    </aop:aspect>

</aop:config>

如xml文件中所示,arg是定义于pointcut中的,而arg-names是定义于after等切入位置内的。

args是和execution用在一起,用来过滤要被代理的方法的,如果不和arg-names一起用,那么用法是args(类名,类名...)。 如果和arg-names(参数名1,参数名2...)一起用,那么用法是args(参数1,参数2...),其中,参数1和参数2的类型由arg-names所代表的方法的参数确定

arg-names是和代理方法一起用的(就是你要加在被代理的方法之前或者之后的那个方法) arg-names(参数名1,参数名2...) 其中的参数名1 参数名2 和 代理方法的参数名是一一对应的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档