Heim Java javaLernprogramm Java-Annotationsmechanismus und seine Prinzipien

Java-Annotationsmechanismus und seine Prinzipien

Feb 03, 2017 pm 02:47 PM

Annotationen werden auch Metadaten genannt, wie z. B. unsere gemeinsamen @Override- und @Deprecated-Funktionen. Sie werden zur Erläuterung des Codes verwendet. Sie können zur Beschreibung von Paketen, Klassen und Schnittstellen verwendet werden , Felder und Methodenparameter, lokale Variablen usw. zur Annotation. Seine Hauptfunktionen sind wie folgt:

  1. Generieren Sie Dokumente und generieren Sie Javadoc-Dokumente mithilfe der im Code identifizierten Metadaten.

  2. Kompilierungsprüfung: Die im Code identifizierten Metadaten ermöglichen dem Compiler eine Überprüfung und Verifizierung während der Kompilierung.

  3. Dynamische Verarbeitung zur Kompilierungszeit Dynamische Verarbeitung zur Kompilierungszeit durch die im Code identifizierten Metadaten, z. B. dynamisches Generieren von Code.

  4. Dynamische Verarbeitung zur Laufzeit Dynamische Verarbeitung zur Laufzeit durch im Code identifizierte Metadaten, z. B. mithilfe von Reflection-Injection-Instanzen.

Allgemeine Anmerkungen können in drei Kategorien unterteilt werden:

  • Die erste Kategorie sind Javas eigene Standardanmerkungen, einschließlich @Override, @Deprecated und @ SuppressWarnings werden verwendet, um das Überschreiben einer Methode anzugeben, um anzuzeigen, dass eine bestimmte Klasse oder Methode veraltet ist, und um anzuzeigen, dass Warnungen ignoriert werden sollen. Der Compiler führt eine Überprüfung durch, nachdem er mit diesen Anmerkungen markiert wurde.

  • Eine Kategorie sind Meta-Anmerkungen, die zum Definieren von Anmerkungen verwendet werden, einschließlich @Retention, @Target, @Inherited, @Documented, und @Retention wird verwendet, um dies anzuzeigen Anmerkungen bleiben erhalten. @Target wird verwendet, um den Verwendungsbereich von Anmerkungen anzugeben, @Inherited wird verwendet, um anzugeben, dass Anmerkungen vererbt werden können, und @Documented wird verwendet, um anzugeben, ob Javadoc-Dokumente generiert werden sollen.

  • Der erste Typ sind benutzerdefinierte Anmerkungen. Sie können Anmerkungen entsprechend Ihren eigenen Anforderungen definieren und Metaanmerkungen verwenden, um benutzerdefinierte Anmerkungen zu kommentieren.

Verwendung von Anmerkungen

Die Verwendung von Anmerkungen ist sehr einfach. Sie müssen eine Anmerkung nur dort markieren, wo eine Anmerkung erforderlich ist.

public class Test {
    @Override    
      public String tostring() {        
          return "override it";
    }
}
Nach dem Login kopieren

Zum Beispiel Anmerkungen zur Klasse hinzufügen:

@Deprecated
public class Test {
}
Nach dem Login kopieren

So können die integrierten Anmerkungen von Java direkt verwendet werden, aber oft müssen wir einige Anmerkungen selbst definieren, z Gemeinsame Federanmerkungen werden verwendet, um Abhängigkeiten zwischen Objekten zu verwalten. Schauen wir uns an, wie Sie Ihre eigene Annotation definieren. Lassen Sie uns eine solche Annotation implementieren: Fügen Sie über @Test eine Zeichenfolge in eine bestimmte Klasse ein und über @TestMethod eine Zeichenfolge in eine bestimmte Methode.

① Erstellen Sie eine Testanmerkung, deklarieren Sie sie als Aktion für die Klasse und behalten Sie sie bis zur Laufzeit bei.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
    String value() default "default";
}
Nach dem Login kopieren

② Erstellen Sie eine TestMethod-Annotation, deklarieren Sie sie als Reaktion auf die Methode und behalten Sie sie bis zur Laufzeit bei.

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TestMethod {
    String value();
}
Nach dem Login kopieren

③Die Testklasse gibt nach der Ausführung zwei Zeichenfolgen aus, Standard und Tomcat-Methode. Da @Test keinen Wert übergibt, wird der Standardwert ausgegeben, während @TestMethod die injizierte Zeichenfolge ausgibt.

@Test()
public class AnnotationTest {
    @TestMethod("tomcat-method")
    public void test(){
    }
    public static void main(String[] args){
        Test t = AnnotationTest.class.getAnnotation(Test.class);
        System.out.println(t.value());
        TestMethod tm = null;
        try {
            tm = AnnotationTest.class.getDeclaredMethod("test",null).getAnnotation(TestMethod.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(tm.value());
    }
}
Nach dem Login kopieren

Prinzipien von Annotationen

Zuvor haben wir vorgestellt, wie man die integrierten Annotationen von Java verwendet und wie man eine Annotation anpasst. Schauen wir uns als Nächstes die Prinzipien der Annotationsimplementierung an So werden Anmerkungen unterstützt. Kehren wir für den Annotationstest wie folgt zurück: Wenn die AnnotationTest-Klasse mit Annotationen versehen ist, kann der Wert der Annotationsdeklaration zur Laufzeit über AnnotationTest.class.getAnnotation(Test.class) abgerufen werden Im obigen Satz können Sie sehen, dass die Testanmerkung aus der Klassenstruktur abgerufen wird, sodass die Anmerkung irgendwann zur Klassenstruktur hinzugefügt werden muss.

@Test("test")
public class AnnotationTest {
    public void test(){
    }
}
Nach dem Login kopieren

Vom Java-Quellcode zum Klassenbytecode wird der Compiler vervollständigt. Der Compiler analysiert den Java-Quellcode und generiert Klassendateien, und Anmerkungen werden auch vom Compiler während der Kompilierung verarbeitet Verarbeiten Sie die Anmerkungssymbole und hängen Sie sie an die Klassenstruktur an. Gemäß der JVM-Spezifikation liegt die Klassendateistruktur in einem streng geordneten Format vor. Die einzige Möglichkeit, Informationen an die Klassenstruktur anzuhängen, besteht darin, sie im Attribute-Attribut der Klasse zu speichern Struktur. Wir wissen, dass Klassen, Felder und Methoden ihre eigenen spezifischen Tabellenstrukturen in der Klassenstruktur haben und jede ihre eigenen Attribute hat. Auch ihr Wirkungsbereich kann unterschiedlich sein. Sie können auf Klassen oder auf ein Feld wirken oder Methode speichert der Compiler die Anmerkungsinformationen in den Eigenschaften der Klasse, des Felds oder der Methode.

Nachdem unsere AnnotationTest-Klasse kompiliert wurde, enthält die entsprechende AnnotationTest.class-Datei ein RuntimeVisibleAnnotations-Attribut. Da diese Annotation auf die Klasse angewendet wird, wird dieses Attribut dem Attributsatz der Klasse hinzugefügt. Das heißt, das Schlüssel-Wert-Paar value=test der Test-Annotation wird aufgezeichnet. Wenn die JVM den Bytecode der Datei AnnotationTest.class lädt, speichert sie den Attributwert RuntimeVisibleAnnotations im Klassenobjekt von AnnotationTest, sodass das Testannotationsobjekt über AnnotationTest.class.getAnnotation(Test.class) und dann über abgerufen werden kann Das Test-Annotationsobjekt ruft die Attributwerte in Test ab.

Möglicherweise haben Sie hier Fragen: Was ist das Testanmerkungsobjekt? Tatsächlich ist die Essenz der kompilierten Annotation eine Schnittstelle, die die Annotation-Schnittstelle erbt, also ist @Test tatsächlich „öffentliche Schnittstelle Test erweitert Annotation“. Wenn wir sie über AnnotationTest.class.getAnnotation (Test.class) aufrufen, wird das JDK dies tun Generieren Sie es über einen dynamischen Proxy. Ein Objekt, das die Testschnittstelle implementiert und den RuntimeVisibleAnnotations-Attributwert in diesem Objekt festlegt. Dieses Objekt ist das Test-Annotationsobjekt, und der Annotationswert kann über seine value()-Methode abgerufen werden.

Der gesamte Prozess des Java-Annotationsimplementierungsmechanismus ist wie oben gezeigt. Seine Implementierung erfordert die Zusammenarbeit des Compilers und der JVM.


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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Mar 17, 2025 pm 05:35 PM

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Mar 17, 2025 pm 05:44 PM

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Mar 17, 2025 pm 05:43 PM

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Mar 17, 2025 pm 05:46 PM

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Mar 17, 2025 pm 05:45 PM

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

See all articles