Aop 编程中joinpoint中参数列表

来源:互联网 发布:cad软件下载什么版本 编辑:程序博客网 时间:2024/06/05 14:15
AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口。任何一个增强方法都可以通过将第一个入参声明为JoinPoint访问到连接点上下文的信息。我们先来了解一下这两个接口的主要方法: 
1)JoinPoint 
 java.lang.Object[] getArgs():获取连接点方法运行时的入参列表; 
 Signature getSignature() :获取连接点的方法签名对象; 
 java.lang.Object getTarget() :获取连接点所在的目标对象; 
 java.lang.Object getThis() :获取代理对象本身; 
2)ProceedingJoinPoint 
ProceedingJoinPoint继承JoinPoint子接口,它新增了两个用于执行连接点方法的方法: 
 java.lang.Object proceed() throws java.lang.Throwable:通过反射执行目标对象的连接点处的方法; 

 Java.lang.Object proceed(java.lang.Object[] args) throws java.lang.Throwable:通过反射执行目标对象连接点处的方法,不过使用新的入参替换原来的入参。


最近在写日志时, 通过joinpoint的getArgs()获取参数时,发现获取的参数是一个Object[] ,想取到其中某一项的值比较麻烦。例如前端传过来的值

{
"userid":"2",
"username":"小明",
"age":"23",
"sex":"男",
  }

我只想取到userid,可以先将将数组里的对象先取出,然后转换为json格式,再获取值。

 Object[] args = joinPoint.getArgs();//获取参数 if (args != null) {         Object object = args[0];            JSONObject jsonObject = (JSONObject) JSON.toJSON(object);            String  userid=  (String) jsonObject.get("userid");                System.out.println(userid);}