2017-06-18 7 views
0

Für eines meiner Requirment habe ich eine Schnittstelle mit mehreren Methoden erstellt und jede Methode mit meiner eigenen Java-Annotation kommentiert. Ich habe einen Frühling AOP Aspekt für meine Implementierung Klasse und ich bin nicht in der Lage, meine benutzerdefinierte Annotation in AOP-Aspekt zu bekommen. nach dem Debuggen verstand ich meine benutzerdefinierte Annotation ist Teil der Schnittstelle und nicht in der Implementierungsklasse.So erhalten Sie benutzerdefinierte Java-Anmerkungen aus Methoden der Implementierungsklasse

Wie kann ich meine benutzerdefinierte Annotation in meinen Implementierungsmethoden erhalten, die in Schnittstelle deklariert?

+0

Veröffentlichen Sie den entsprechenden Code. – harshavmb

+0

Sie können es durch Reflexion tun, aber könnten Sie einen Quellcode zeigen, wie Sie versuchen, es und Ihre benutzerdefinierte Anmerkung zu bekommen – xyz

Antwort

1

In Java werden Annotationen nicht von Schnittstellen vererbt. Bei Aspekten müssen Sie die Implementierungsklasse (und/oder Methoden innerhalb dieser Klasse) mit Anmerkungen versehen, nicht die Schnittstelle (falls vorhanden), die die Klasse implementiert. String aop folgt der Java-Regel, dass Annotationen auf Interfaces nicht vererbt werden. Wenn Sie also mit Ihrer Anmerkung arbeiten möchten, erstellen Sie eine abstrakte Superklasse, um dies tun zu können.

Inside Aspekt arbeiten Sie mit Proxy-Objekt und Methoden sind in Proxy-Aufrufe eingehüllt. Aber wenn Sie eine echte Klasse/Schnittstelle kennen, können Sie Annotation durch Reflexion API von der Quellklasse/Schnittstelle erhalten

+0

Danke für die Informationen. Für mein Szenario ist die Schnittstelle durch die Spring Integration implementiert, daher kann ich nicht mit der abstrakten Klasse gehen. Ich löste dies, indem ich die Interface-Methoden mit einer benutzerdefinierten Annotation annotierte, und in meinem Aspekt verwendete ich Reflektion, um die Annotationswerte zu lesen. Das hat mein Problem gelöst. – Maddy

Verwandte Themen