2013-02-10 387 views
8

我创建了自定义注释@MyAnn。我会用它注释方法参数。AspectJ - 获取注释方法参数的值

例如:public static call(@MyAnn String name){...}

使用AspectJ,我怎么能访问和更新与注解所有参数的值是多少?

我发现了一些示例代码,展示了如何创建定制定制注释的切入点,here

所以现在我创建了一个切入点。 但我不知道热得到的参数值有MyAnn注释。

@Aspect 
public class MyAnnAspect { 

    @Around("execution(@my.package.test.MyAnn") // I hope this pointcut will work 
    public void changeParameter(final ProceedingJoinPoint pjp) throws Throwable { 
     // How I can there get parameter value (and chage it)? 
    } 
} 

回答

17

我不认为切入点的工作,因为它不是被注释的方法,顺便可以这样做:

MethodSignature ms = (MethodSignature) pjp.getSignature(); 
Method m = ms.getMethod(); 
Annotation[][] pa = m.getParameterAnnotations(); 

现在你可以遍历注解,并找到通过调用pjp.getArgs(),正确的注释(如果存在)获取参数值。

+1

如何从getArgs获取字段名称/字段值。 ?它只会给出所有的值。与注释没有关系。 – 2015-02-03 07:29:22