Heim >Java >javaLernprogramm >Was sind Annotationen in Java und eine detaillierte Einführung in ihre Prinzipien?
Was sind Annotationen?
Annotationen werden auch Metadaten genannt, wie z. B. unsere gemeinsamen @Override- und @Deprecated-Annotationen. Sie werden zur Beschreibung des Codes und des Pakets verwendet. , Klassen, Schnittstellen, Felder, Methodenparameter, lokale Variablen usw. werden mit Anmerkungen versehen. Seine Hauptfunktionen sind wie folgt:
Dokumente generieren und Javadoc-Dokumente mithilfe der im Code identifizierten Metadaten generieren.
Mit der Kompilierungsprüfung kann der Compiler während der Kompilierung anhand der im Code identifizierten Metadaten prüfen und verifizieren.
Dynamische Verarbeitung zur Kompilierungszeit Dynamische Verarbeitung zur Kompilierzeit durch die im Code identifizierten Metadaten, z. B. dynamisches Generieren von Code.
Dynamische Verarbeitung zur Laufzeit durch im Code identifizierte Metadaten, z. B. die Verwendung von Reflektion zum Einfügen von Instanzen.
Allgemeine Anmerkungen können in drei Kategorien unterteilt werden:
Die erste Kategorie sind die Standardanmerkungen, die mit Java geliefert werden, einschließlich @Override, @Deprecated und @SuppressWarnings, die verwendet werden, um das Überschreiben von a anzuzeigen Markieren Sie eine Klasse oder Methode als veraltet und markieren Sie Warnungen, die ignoriert werden sollen. Der Compiler überprüft sie, nachdem er sie mit diesen Anmerkungen markiert hat.
Eine Kategorie sind Meta-Anmerkungen. Meta-Anmerkungen sind Anmerkungen, die zum Definieren von Anmerkungen verwendet werden, einschließlich @Retention, @Target, @Inherited, @Documented, @Retention wird verwendet, um die Phase anzugeben, in der Anmerkungen vorliegen 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.
Die erste Kategorie sind benutzerdefinierte Anmerkungen. Sie können Anmerkungen entsprechend Ihren eigenen Anforderungen definieren und Meta-Anmerkungen verwenden, um benutzerdefinierte Anmerkungen zu kommentieren.
Annotationsprinzip:
Sehen Sie sich an, wie Annotationen unter dem Java-System unterstützt werden. 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(){ } }
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.
Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!
Weitere Java-bezogene Artikel über Annotationen und ihre Prinzipien finden Sie auf der chinesischen PHP-Website!