Seit der Einführung der Anmerkungen in der Java 5.0 -Version ist es ein sehr wichtiger Bestandteil der Java -Plattform geworden. Während des Entwicklungsprozesses sehen wir häufig Anmerkungen wie @Override und @Deprecated im Anwendungscode. In diesem Artikel werde ich Ihnen sagen, was Anmerkungen sind, warum sie eingeführt werden sollten, wie Anmerkungen funktionieren, wie Sie benutzerdefinierte Anmerkungen (anhand von Beispielen) und unter welchen Umständen Sie Anmerkungen sowie die neuesten Anmerkungen und ADF (Anwendungsentwicklungsrahmen) verwenden können. Es wird ein wenig Zeit dauern, also bereiten Sie sich eine Tasse Kaffee vor und lassen Sie uns die Welt der Annotation betreten.
Was ist Annotation?
Ein Wort kann Anmerkungen beschreiben, dh Metadaten, dh Daten, die Daten beschreiben. Daher kann gesagt werden, dass die Annotation die Metadaten des Quellcode ist. Zum Beispiel der folgende Code:
@Overridepublic String toString () {return "Dies ist String -Darstellung des aktuellen Objekts.";}Im obigen Code schreibe ich die Methode toString () neu und verwende die @Override -Annotation. Selbst wenn ich @Override Annotation nicht zum Markieren des Codes verwende, kann das Programm normal ausführen. Was bedeutet die Annotation? Gibt es einen Nutzen, um so zu schreiben? Tatsächlich teilt @Override dem Compiler mit, dass diese Methode eine Umschreiben -Methode ist (Metadaten, die die Methode beschreibt). Wenn die Methode in der übergeordneten Klasse nicht vorhanden ist, meldet der Compiler einen Fehler und fordert, dass die Methode die Methode in der übergeordneten Klasse nicht umgeschrieben hat. Wenn ich beispielsweise den falschen Tippfehler versehentlich buchstabiert, schreibe toString () als toString () {double r}, und ich verwende die @Override -Annotation nicht, das Programm kann weiterhin kompiliert und ausgeführt werden. Die Ergebnisse der Operation werden sich jedoch sehr von dem unterscheiden, was ich erwartet hatte. Jetzt verstehen wir, was Anmerkungen sind, und die Verwendung von Anmerkungen hilft beim Lesen des Programms.
Annotation ist ein spezieller Modifikator, der auf Klassen, Methoden, Parameter, Variablen, Konstruktoren und Paketdeklarationen angewendet wird. Es ist ein Tool, das vom JSR-175-Standard ausgewählt wurde, um Metadaten zu beschreiben.
Warum Anmerkungen einführen?
Vorher (oder sogar nach der Verwendung) wird XML häufig zur Beschreibung von Metadaten verwendet. Einige Anwendungsentwickler und Architekten haben festgestellt, dass die Wartung von XML immer schlechter wird. Sie möchten etwas eng mit dem Code gekoppelt sind, anstatt eine Codebeschreibung, die lose an den Code (und in einigen Fällen sogar vollständig getrennt) wie XML gekoppelt ist. Wenn Sie in Google nach "XML vs. Annotations" suchen, sehen Sie viele Debatten zu diesem Thema. Das Interessanteste ist, dass die XML -Konfiguration tatsächlich in separate Code und Konfiguration eingeführt wird. Die obigen zwei Ansichten können Sie verwirren. Beide Ansichten scheinen einen Zyklus zu bilden, aber jeder hat seine Vor- und Nachteile. Verwenden wir ein Beispiel, um den Unterschied zwischen den beiden zu verstehen.
Wenn Sie viele Konstanten oder Parameter für Ihre Anwendung festlegen möchten, ist XML in diesem Fall eine gute Wahl, da er nicht mit einem bestimmten Code verbunden ist. Wenn Sie eine Methode als Service deklarieren möchten, wäre es besser, Annotation zu verwenden, da in diesem Fall Anmerkungen und Methoden eng gekoppelt sein müssen, und Entwickler müssen dies erkennen.
Ein weiterer wichtiger Faktor ist, dass Annotation eine Standardmethode zur Beschreibung von Metadaten definiert. Zuvor definieren Entwickler normalerweise Metadaten auf ihre eigene Weise. Verwenden Sie beispielsweise Tagged -Schnittstellen, Anmerkungen, transiente Schlüsselwörter usw. Jeder Programmierer definiert Metadaten auf seine eigene Art und Weise, im Gegensatz zum Standardweg der Annotation.
Derzeit verwenden viele Frameworks XML und Annotation in Kombination, um die Vor- und Nachteile zwischen beiden auszugleichen.
Wie funktioniert Annotation? Wie schreibe ich eine benutzerdefinierte Annotation?
Bevor wir diesen Teil mitgeteilt haben, empfehlen wir Ihnen, zuerst die Annotationen -Beispielcode -Annotations -Beispiele für STEIL.zip herunterzuladen. Legen Sie nach dem Herunterladen in die IDE ein, die Sie gewohnt sind. Diese Codes helfen Ihnen dabei, den Annotationsmechanismus besser zu verstehen.
Das Schreiben von Anmerkungen ist sehr einfach. Sie können die Definition der Annotation mit der Definition der Schnittstelle vergleichen. Schauen wir uns zwei Beispiele an: eine ist die Standardannotation @Override, die andere ist die benutzerdefinierte Annotation @todo.
@Target (elementtype.method) @Retention (retentionPolicy.source) public @Interface Override {}Möglicherweise haben Sie einige Fragen zur @Override -Annotation, sie tut nichts. Wie überprüft es also, dass es in der übergeordneten Klasse eine Funktion mit demselben Namen gibt? Natürlich nicht überrascht, ich necke dich nur. Die Definition von @Override Annotation ist nicht nur dieser kleine Code. Dieser Teil des Inhalts ist sehr wichtig, ich muss ihn noch einmal wiederholen: Anmerkungen sind nur Metadaten und hat nichts mit Geschäftslogik zu tun. Es ist ein bisschen schwer zu verstehen, aber das war's. Wenn Anmerkungen keine Geschäftslogik enthalten, muss jemand sie implementieren. Metadatenbenutzer tun dies. Anmerkungen enthält nur Informationen zu den von ihm definierten Eigenschaften (Klasse/Methode/Paket/Domäne). Benutzer von Anmerkungen (erneut ein Code) lesen diese Informationen und implementieren die erforderliche Logik.
Wenn wir Javas Anmerkungen (wie @Override) verwenden, ist der JVM ein Benutzer, der auf der Bytecode -Ebene funktioniert. Zu diesem Zeitpunkt können Anwendungsentwickler keine benutzerdefinierten Anmerkungen steuern oder verwenden. Lassen Sie uns also erklären, wie Sie benutzerdefinierte Anmerkungen schreiben.
Sprechen wir über die wichtigsten Punkte des Schreibens benutzerdefinierter Anmerkungen nacheinander. Im obigen Beispiel sehen Sie einige Anmerkungen, die auf die Anmerkungen angewendet werden.
Die J2SE5.0 -Version enthält vier Arten von Meta -Annotationen in java.lang.annotation, die speziell andere Annotationen kommentiert:
@Documented Eine einfache Annotations -Tag -Annotation, die angibt, ob Annotationsinformationen dem Java -Dokument hinzugefügt werden.
@Retention definiert den Lebenszyklus dieser Annotation.
RetentionPolicy.Source wird während der Zusammenstellungsphase verworfen. Diese Anmerkungen haben nach der Zusammenstellung keine Bedeutung mehr, so dass sie keine Bytecode schreiben. @Override, @SuppressWarnings gehören alle zu dieser Art von Annotation.
RetentionPolicy.class wird verworfen, wenn die Klasse geladen ist. Nützlich bei der Verarbeitung von Bytecode -Dateien. Dies ist die Standardmethode für Anmerkungen.
RetentionPolicy.Runtime wird nie verworfen, und die Annotation wird während der Laufzeit beibehalten, sodass die Informationen der Annotation mit dem Reflexionsmechanismus gelesen werden können. Unsere benutzerdefinierten Anmerkungen werden normalerweise auf diese Weise verwendet.
@Target gibt an, wo diese Annotation verwendet wird. Wenn nicht angegeben, kann die Annotation überall platziert werden. Hier sind einige der verfügbaren Parameter. Es ist zu beachten, dass die Annotation der Attribute kompatibel ist. Wenn Sie allen 7 Attributen Annotation hinzufügen und nur ein Attribut ausschließen möchten, müssen Sie das Ziel definieren, um alle Attribute hinzuzufügen.
@Inherited definiert die Beziehung zwischen dieser Annotation und den Unterklassen
Wie ist die interne Definition von Anmerkungen? Anmerkungen unterstützen nur grundlegende Typen, String- und Enum -Typen. Alle Attribute im Kommentar werden als Methoden definiert und ermöglichen die Bereitstellung von Standardwerten.
@Target (elementtype.method) @Retention (retentionPolicy.runtime) @Interface Todo {public enum priority {niedrig, mittel, hoch} öffentlicher Enum -Status {gestartet, nicht started} String Author () default "yash"; Priority Priority () Default Priority.low; Das folgende Beispiel zeigt, wie die obigen Anmerkungen verwendet werden.
@Todo (priority = todo.priority.medium, Author = "Yashwant", status = Todo.status.started) public void Inpletemethod1 () {// Eine Geschäftslogik ist geschrieben //, aber es ist noch nicht vollständig}} Wenn in der Annotation nur ein Attribut vorhanden ist, kann es direkt als "Wert" bezeichnet werden, und es müssen bei Verwendung des Attributnamens nicht angezeigt werden.
@Interface Author {String value ();}@Autor ("yashwant") public void somemethod () {} Aber so weit sieht alles ziemlich gut aus. Wir definieren unsere eigenen Anmerkungen und wenden sie auf Geschäftslogikmethoden an. Jetzt müssen wir ein Benutzerprogramm schreiben, um unsere Annotation anzurufen. Hier müssen wir den Reflexionsmechanismus verwenden. Wenn Sie mit dem Reflexionscode vertraut sind, wissen Sie, dass Reflexion Klassennamen, Methoden und Instanzvariablenobjekte bereitstellen kann. Alle diese Objekte haben die Methode getAnnotation (), Annotationsinformationen zurückzugeben. Wir müssen dieses Objekt in unseren benutzerdefinierten Kommentar umwandeln (nach Überprüfung bei InstanceOf ()) und können die Methoden auch im benutzerdefinierten Kommentar aufrufen. Schauen Sie sich den folgenden Beispielcode anhand der obigen Annotation an:
Class BusinessLogicClass = BusinessLogic.class; für (Methode Methode: BusinessLogicClass.getMethods ()) {Todo todoannotation = (Todo). : " + todoannotation.Author ());Annotationsnutzungsfälle
Die Funktionen von Anmerkungen sind sehr leistungsfähig, und Rahmenbedingungen wie Spring und Hergate verwenden Annotationen für Protokollierung und Gültigkeit. Anmerkungen können angewendet werden, wenn Markerschnittstellen verwendet werden. Der Unterschied besteht darin, dass die Tag -Schnittstelle zum Definieren einer vollständigen Klasse verwendet wird. Sie können jedoch Kommentare für eine einzelne Methode definieren, z.
In der neuesten Servlet 3.0 wurden viele neue Anmerkungen eingeführt, insbesondere in Bezug auf die Sicherheit von Servlet.
Handlige Handlige Mit dieser Annotation werden eine Reihe von Anwendungsklassen dargestellt, die an den ServletContainerInitializer übergeben wurden.
Httpconstraint Diese Annotation stellt die Sicherheitsbeschränkungen für Anwendungsanfragen aller HTTP -Methoden dar und unterscheidet sich von den in der Annotation ServletSecurity definierten Sicherheitsbeschränkungen für httpMethodconstraint -Sicherheitsbeschränkungen.
HttpMethodconstraint gibt Sicherheitsbeschränkungen für verschiedene Arten von Anfragen an, die sich von der Annotation unterscheiden, die den Typ der HTTP -Protokollmethode in der ServletSecurity -Annotation beschreibt.
MultipartConfig Diese Annotation ist im Servlet gekennzeichnet, was darauf hinweist, dass der MIME-Typ der Anfrage, dass das Servlet verarbeiten möchte, mehrteilig/formdaten ist.
ServletSecurity Die Annotation ist in der Servlet -Erbschaftsklasse gekennzeichnet, und die HTTP -Protokollanfrage ist gezwungen, Sicherheitsbeschränkungen einzuhalten.
Webfilter wird verwendet, um einen Serverfilter zu deklarieren.
Webinitparam Mit dieser Annotation werden die Initialisierungsparameter im Servlet oder Filter deklariert und normalerweise mit @Webservlet oder @WebFilter verwendet.
Weblistener Diese Annotation ist im Kontext der Webanwendung eine andere Art von Ereigniserklärung -Hörer.
WebServlet Diese Annotation wird verwendet, um die Konfiguration eines Servlets zu deklarieren.
ADF (Anwendungsrahmen) und Anmerkungen
Jetzt diskutieren wir den letzten Teil des Artikels. Anwendungsrahmen, bekannt als ADF, wird von Oracle entwickelt, um konvergierte Oracle -Anwendungen zu erstellen. Wir haben die Vor- und Nachteile von Anmerkungen verstanden und wissen, wie man benutzerdefinierte Anmerkungen schreibt, aber wohin sollten wir die Anmerkungen anwenden? Bietet ADF einige einfache Anmerkungen? Eine gute Frage: In der Tat gibt es einige Einschränkungen bei der Verwendung von Anmerkungen in ADF. Die zuvor erwähnten Anwendungsrahmen wie Feder- und Hibernate verwenden AOP (seitlich orientierte Programmierung). In AOP bietet das Framework einen Mechanismus, um Code in die Vorverarbeitung und die anschließende Verarbeitung von Ereignissen zu injizieren. Zum Beispiel: Sie haben einen Haken, um Code vor und nach der Methode auszuführen, damit Sie Ihren Benutzercode an diesen Stellen schreiben können. ADF verwendet keine AOP. Wenn wir Anwendungsfälle für Anmerkungen zur Verfügung haben, müssen wir diese möglicherweise durch Erbschaft implementieren.
Ich hoffe, Sie mögen diesen Artikel, um Ihnen zu helfen, die Bedeutung der Annotation besser zu verstehen!