Wie man eine Methode Kommentar Wert aus einer ProceedingJoinPoint?
Habe ich folgende annotation.
MyAnnotation.java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
SomeAspect.java
public class SomeAspect{
@Around("execution(public * *(..)) && @annotation(com.mycompany.MyAnnotation)")
public Object procede(ProceedingJoinPoint call) throws Throwable {
//Some logic
}
}
SomeOther.java
public class SomeOther{
@MyAnnotation("ABC")
public String someMethod(String name){
}
}
In der obigen Klasse bin passing "ABC" mit in @MyAnnotation.
Nun, wie kann ich den Zugriff "ABC" - Wert in procede Methode der SomeAspect.java Klasse?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Signatur von einem ProceedingJoinPoint und im Falle eines Methodenaufrufs nur werfe es ein MethodSignature.
Aber Sie sollten zuerst fügen Sie eine annotation-Attribut. Dein Beispiel-code nicht haben, z.B.
Dann können Sie für den Zugriff
BEARBEITEN
Einen
Class
ist auch einAnnotatedElement
, so können Sie es die gleiche Weise wie von einerMethod
. E. g. Eine annotation der Methode deklarieren der Klasse können bezogen werden überSine Sie sind mit spring vielleicht wollen Sie auch zu verwenden, spring
AnnotationUtils.findAnnotation(..)
. Es sucht nach einer annotation wie im Frühling tut. E. g. auch auf der Suche atsuper class-und interface-Methoden, etc.Eigentlich denke ich, wir können das
value
in einem anderen herum, statt einfach von ProceedingJoinPoint, die auf jeden Fall von uns verlangen, Gebrauch zu machen vonreflection
.Haben versuchen Sie wie folgt mithilfe der annotation direkt: hinzufügen
com.mycompany.MyAnnotation yourAnnotation
in Ihremadvice params
und@annotation(yourAnnotation)
im@Around
.com.mycompany.MyAnnotation
in der Beratung params arbeiten, nur so, dass inyourAnnotation
werden kann, gültige Variablen-Namen angeben, daMyAnnotation
in params bereits Punkte heraus, welche annotation es sein sollte. HieryourAnnotation
verwendet, um die annotation-Instanz nur.Wenn Sie übergeben möchten mehr params können Sie versuchen
args()
.Für mehr details, bitte überprüfen Sie die offizielle doc. Für die Anmerkung Wert, Sie können einfach suchen
@Auditable
.Dies funktioniert so gut - Sie können Holen annotation von Informationen mit der Reflexion auf die Klasse.
Oder
Dies funktioniert nur, wenn Ihre annotation ist zur Laufzeit verfügbar, die Sie haben korrekt deklariert.
Renés Beispiel ist, das mir ein langer Weg. Auch die Erklärung, wie ich ClassLevel Anmerkungen.
Dann kann ich aber nur Lesen ClassLevel Anmerkungen Werte, wenn ich vorher benutzt eine Methode, die Anmerkung mit "*@Around("execution(public * (..)) && @annotation(com.MeineFirma.MyAnnotation)")""
Wie kann ich dies umgehen? Wie kann ich die trigger ein Aspekt, wenn ein ClassLevel Annotation festgelegt ist, ohne über eine Methode der Ausführung?
Ich schreiben wollen ClassLevel Annotation wie
Es importieren der Konfiguration über "SwaggerConfiguration" wo will ich den Wert von "controllerPackage"
Wie kann ich mich befreien kann von der annotation auf initSwagger()? Da die Application.class ist nicht bekannt SwaggerConfiguration (Swagger Zeug, es in eine separate lib) kann ich nicht verwenden einfache Reflexion wie