2013-02-10 11 views
8

Ho creato annotazioni personalizzate @MyAnn. E annoterò i parametri del metodo con esso.AspectJ - Ottieni il valore del parametro metodo annotato

Ad esempio: public static call(@MyAnn String name){...}

Utilizzando AspectJ, come posso accedere e aggiornare i valori di tutti i parametri annotati con l'annotazione?

ho trovato alcuni esempi di codice che mostra come creare pointcut mirati annotazioni personalizzate, here.

Quindi per ora, ho creato un aspetto con una pointcut. Ma non lo so a caldo per ottenere il valore del parametro annotato con 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)? 
    } 
} 

risposta

17

Non credo che il lavoro pointcut, perché non è il metodo che viene annotato, dal modo in cui si può fare:

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

Ora è possibile iterare le annotazioni, e trovare l'annotazione corretta, se presente, ottiene il valore del parametro chiamando pjp.getArgs().

+1

Come si può ottenere il nome campo/valore campo da getArgs. ? Darà solo tutti i valori. Non c'è alcuna relazione con l'annotazione. –

Problemi correlati