9

我创建了自定义注释@MyAnn。我会用它来注释方法参数。

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

使用 AspectJ,我如何访问和更新所有带有注释的参数的值?

我在这里找到了一些示例代码,展示了如何创建针对自定义注释的切入点

所以现在,我用切入点创建了一个切面。但我不知道如何获取带有注释的参数值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)? 
    }
}
4

1 回答 1

17

我认为切入点不起作用,因为它不是注释的方法,顺便说一句,你可以这样做:

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

现在你可以遍历注解,找到合适的注解,如果存在的话,通过调用pjp.getArgs().

于 2013-02-10T18:01:50.067 回答