2013-02-10 7 views
8

Ich erstellte benutzerdefinierte Annotation @MyAnn. Und ich werde Methodenparameter damit annotieren.AspectJ - Erhalte den Wert des annotierten Methodenparameters

Zum Beispiel: public static call(@MyAnn String name){...}

AspectJ verwenden, wie kann ich zugreifen und diese aktualisieren die Werte aller Parameter mit der Anmerkung kommentiert?

Ich habe einen Beispielcode gefunden, der zeigt, wie man auf benutzerdefinierte Annotationen gerichtete Punktzüge erstellt, here.

Also für jetzt habe ich einen Aspekt mit einem Pointcut erstellt. Aber ich weiß nicht heiß, um Wert von Parameter mit MyAnn kommentiert kommen.

@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)? 
    } 
} 

Antwort

17

Ich glaube nicht, dass pointcut Arbeit, weil es nicht die Methode ist, die durch die Art und Weise erwähnt wird, was Sie tun:

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

Jetzt können Sie die Anmerkungen iterieren und finden die richtige Annotation, falls vorhanden, erhält den Parameterwert durch Aufruf von pjp.getArgs().

+1

Wie erhalten Sie den Feldnamen/Feldwert von getArgs. ? Es wird nur alle Werte geben. Es gibt keine Beziehung mit der Anmerkung. –