2013-02-10 6 views
8

Я создал пользовательскую аннотацию @MyAnn. И я буду аннотировать параметры метода с ним.AspectJ - Получить значение параметра аннотированного метода

Например: public static call(@MyAnn String name){...}

Использование AspectJ, как я могу получить доступ и обновлять значения всех параметров, аннотированных аннотацией?

Я нашел пример кода, показывающий, как создавать pointcuts, предназначенные для пользовательских аннотаций, here.

Итак, теперь я создал аспект с pointcut. Но я не знаю, как hot получить значение параметра, аннотированного 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. ? Он даст только все значения. Нет никакой связи с аннотацией. –