Heim > Java > javaLernprogramm > Kann AspectJ eine Annotationsvererbung für Schnittstellen und ihre Methoden erreichen?

Kann AspectJ eine Annotationsvererbung für Schnittstellen und ihre Methoden erreichen?

Patricia Arquette
Freigeben: 2024-10-24 00:35:30
Original
383 Leute haben es durchsucht

Can AspectJ Achieve Annotation Inheritance for Interfaces and Their Methods?

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>
Nach dem Login kopieren

Implementierung:

  • ITDs (Inter-Type-Definitionen) fügen die Annotation manuell zur Schnittstelle hinzu und implementieren/ Überschreiben von Klassen/Methoden.
  • Die eigentliche Anmerkung auf der Schnittstelle oder Methode kann entfernt werden.

Ergebnis:

Das Konsolenprotokoll jetzt druckt:

execution(de.scrum_master.app.Application())
execution(void de.scrum_master.app.Application.two())
Nach dem Login kopieren

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 .aj um.

<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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage