Kann AspectJ die Vererbung von Annotationen für Schnittstellen und ihre Methoden emulieren?
Die Vererbung von Java-Annotationen ist eingeschränkt, wobei Annotationen für Schnittstellen, Methoden usw. definiert sind Annotationen, die nicht von implementierenden Klassen, überschreibenden Methoden oder Klassen, die annotierte Annotationen verwenden, geerbt werden. Diese Einschränkung gilt für AspectJ, das innerhalb der JVM-Einschränkungen arbeitet.
Lösung: Emulation der Annotationsvererbung in bestimmten Fällen
Obwohl eine allgemeine Lösung für die Annotationsvererbung nicht verfügbar ist, gibt es eine Problemumgehung existiert für bestimmte Schnittstellen oder Methoden:
<code class="java">public aspect MarkerAnnotationInheritor { // Implementing classes inherit the marker annotation declare @type: MyInterface+ : @Marker; // Overriding 'two' method inherits the annotation declare @method : void MyInterface+.two() : @Marker; }</code>
Implementierung:
Ergebnis:
Das Konsolenprotokoll jetzt druckt:
execution(de.scrum_master.app.Application()) execution(void de.scrum_master.app.Application.two())
Alternative Lösung:
Der Aspekt kann in die Schnittstelle eingebettet werden, wodurch die Implementierung an einem Ort konsolidiert wird. Benennen Sie die Datei zur Compilererkennung in
<code class="java">// MyInterface.aj public interface MyInterface { void one(); void two(); public static aspect MarkerAnnotationInheritor { declare @type: MyInterface+ : @Marker; declare @method : void MyInterface+.two() : @Marker; } }</code>
Das obige ist der detaillierte Inhalt vonKann AspectJ eine Annotationsvererbung für Schnittstellen und ihre Methoden erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!