2017-08-16 3 views
0

Ich habe einen Pointcut-Ausdruck, der alle Methoden in einem Paket aufruft.Pointcut-Ausdruck, um das Argument und den Annotation-Wert zu erhalten

Einige Methoden können Annotationen und einen Parameter enthalten, der Ratschläge erhalten muss.

Ich habe versucht, mit so etwas wie diese

@Around("execution(* com.man.test..jmx..*(..)) && args(name,..) && @annotation(requiredJMX)") 

Das Problem mit diesem Ausdruck ist, dass es mit dem Namen und Kommentierung liegt vor, wenn ein Parameter aufruft.

Ist es möglich, dass ich alle Methoden im Paket aufrufen kann und gleichzeitig der Name Parameter und Anmerkung optional sind?

So etwas wie dieses

@Around("execution(* com.man.test..jmx..*(..)) || args(name,..) || @annotation(requiredJMX)") 
+0

ist der zweite Ausdruck nicht was du willst? – dimitrisli

+0

Ich brauche zweiten Ausdruck, aber es hat nicht funktioniert –

Antwort

1

Wenn Sie den Wert der Annotation und args von Verfahren erhalten möchten, Sie können wie folgt tun:

@Around("execution(* com.man.test..jmx..*(..)) public Object yourMethod(ProceedingJoinPoint joinpoint){

MethodSignature signature = (MethodSignature) joinPoint.getSignature(); 
Method method = signature.getMethod(); 
MyAnnotation annotation = method.getAnnotation(MyAnnotation.class); 
if(null != annotation && method.getParameters().length > 0 
    && "name".equals(method.getParameters()[0].getName())){ 

    //do your work 
} 

}

+0

"name" .equals (method.getParameters() [i] .getName() dosent Übereinstimmung –

+0

"name" ist der Name des ersten Parameters Ihrer Methode .. –

+0

ja, das hat nicht funktioniert, es gibt args0 zurück –

Verwandte Themen