Das Prinzip der Java -Annotation
Java: Verwenden Sie Annotation, //www.vevb.com/article/101747.htm
Was ist Annotation
Anmerkungen werden auch Metadaten bezeichnet, wie unsere gemeinsamen @Override und @deprecated. Anmerkungen sind eine Funktion, die in der Version JDK1.5 eingeführt wird. Sie werden verwendet, um den Code zu erklären und können Pakete, Klassen, Schnittstellen, Felder, Methodenparameter, lokale Variablen usw. kommentieren. Die Hauptfunktionen sind wie folgt:
Allgemeine Anmerkungen können in drei Kategorien unterteilt werden:
Eine Kategorie sind die Standardanmerkungen, die Java enthalten, einschließlich @Override, @deprecated und @SuppressWarnings, die verwendet werden, um anzuzeigen, dass eine bestimmte Methode umschreibt, eine bestimmte Klasse oder Methode veraltet ist und eine Warnung zu ignorieren ist. Nachdem diese Anmerkungen markiert sind, wird der Compiler es überprüfen.
Ein Typ ist Meta -Annotation. Meta -Annotation ist Annotation, mit der Anmerkungen definiert werden, einschließlich @Retention, @Target, @inherited, @Documented. @Retention wird verwendet, um die Stufe anzugeben, in der die Annotation beibehalten wird. @Target wird verwendet, um den Umfang der verwendeten Annotation anzuzeigen. @Inherited wird verwendet, um anzuzeigen, dass die Annotation geerbt werden kann, und @Documented wird verwendet, um ein Javadoc -Dokument zu generieren.
Ein Typ sind benutzerdefinierte Anmerkungen. Sie können Anmerkungen entsprechend Ihren eigenen Bedürfnissen definieren und Meta -Anmerkungen verwenden, um benutzerdefinierte Anmerkungen zu kommentieren.
Annotationsprinzip:
Lassen Sie uns sehen, wie Sie Anmerkungen im Java -System unterstützen. Kehren wir zum obigen Beispiel für benutzerdefinierte Annotation zurück. Für Annotationstest wie folgt. Wenn Sie die Annotationstest -Klasse kommentieren, kann der Wert der Annotationserklärung zur Laufzeit über AnnotationTest.class.getannotation (test.class) erhalten werden. Aus dem obigen Satz ist ersichtlich, dass es die Testannotation aus der Klassenstruktur erhält, so dass die Annotation zu einem bestimmten Zeitpunkt der Klassenstruktur hinzugefügt wurde.
@Test ("test") public class AnnotationTest {public void test () {}}Vom Java -Quellcode zum Klassenbytecode erfolgt vom Compiler. Der Compiler analysiert den Java -Quellcode und generiert eine Klassendatei. Anmerkungen werden auch vom Compiler zum Kompilierungszeit verarbeitet. Der Compiler verarbeitet Annotationssymbole und hängt sie an die Klassenstruktur an. Nach der JVM -Spezifikation ist die Klassendateistruktur ein streng geordnetes Format. Die einzige Möglichkeit, Informationen an die Klassenstruktur anzuhängen, besteht darin, sie in die Attribute der Attribute der Klassenstruktur zu speichern. Wir wissen, dass es für Klassen, Felder und Methoden ihre eigenen spezifischen Tabellenstrukturen in der Klassenstruktur gibt und jedes seine eigenen Attribute hat. Für Anmerkungen kann auch der Umfang ihrer Funktionen unterschiedlich sein. Sie können in Klassen oder auf Feldern oder Methoden verwendet werden. Zu diesem Zeitpunkt speichert der Compiler die Annotationsinformationen über die Attribute der Klasse, der Felder und der Methoden entsprechend.
Nachdem unsere Annotationstest -Klasse zusammengestellt wurde, wird eine Eigenschaft RunTimeVisibleannotations in die entsprechende Annotationstest.Class -Datei aufgenommen. Da diese Annotation auf die Klasse angewendet wird, wird diese Eigenschaft zum Attributsatz der Klasse hinzugefügt. Das heißt, der Schlüsselwertpaarwert = Test der Testanmerkungen wird aufgezeichnet. Wenn der JVM die Bytecode der Annotationstest.Class -Datei lädt, wird der Eigenschaftswert runtimevisibleannotations in dem Klassenobjekt des Annotationstest gespeichert, sodass das Testannotationsobjekt des Tests durch Annotationstest.Class.Getannotation (test.class) erhalten werden kann, und dann wird der Eigenschaftswert im Test erhalten. Der Test wird im Test -Annotationsobjekt erhalten.
Hier kann es Fragen geben, wie lautet das Testanschlag -Objekt? Tatsächlich ist die Essenz der Annotation nach der Kompilierung eine Schnittstelle, die die Annotationsschnittstelle erbt, sodass @Test tatsächlich "öffentlicher Schnittstellen -Test wird Annotation erweitert". Wenn wir AnnotationTest.class.getannotation (test.class) anrufen, generiert das JDK ein Objekt, das die Testschnittstelle über dynamische Proxy implementiert, und setzt den Eigenschaft RunTimeVisibleannotations in dieses Objekt. Dieses Objekt ist ein Test -Annotationsobjekt. Der Annotationswert kann durch seine Value () -Methode erhalten werden.
Der gesamte Prozess des Implementierungsmechanismus für Java -Annotation ist oben gezeigt. Seine Implementierung erfordert die Zusammenarbeit des Compilers und des JVM.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!