Was sind die Hauptbereiche, in denen wir Anmerkungen verwenden können? Ist die Funktion ein Ersatz für eine XML-basierte Konfiguration?
java
annotations
Biju CD
quelle
quelle
Antworten:
Anmerkungen sind Meta-Meta-Objekte, mit denen andere Meta-Objekte beschrieben werden können . Metaobjekte sind Klassen, Felder und Methoden. Das Abfragen eines Objekts nach seinem Metaobjekt (z. B.
anObj.getClass()
) wird Introspektion genannt . Die Selbstbeobachtung kann weiter gehen und wir können ein Metaobjekt fragen, was seine Anmerkungen sind (zaClass.getAnnotations
. B. ). Selbstbeobachtung und Anmerkungen gehören zu dem, was als Reflexion und Metaprogrammierung bezeichnet wird .Eine Anmerkung muss auf die eine oder andere Weise interpretiert werden, um nützlich zu sein. Anmerkungen können zur Entwicklungszeit von der IDE oder dem Compiler oder zur Laufzeit von einem Framework interpretiert werden .
Die Verarbeitung von Anmerkungen ist ein sehr leistungsfähiger Mechanismus und kann auf viele verschiedene Arten verwendet werden:
@Deprecated, @Override
oder@NotNull
@Entity, @TestCase, @WebService
@Statefull, @Transaction
@Column, @XmlElement
In allen Fällen wird eine Anmerkung verwendet, um das Element zu beschreiben und seine Bedeutung zu verdeutlichen .
Vor JDK5 mussten Informationen, die jetzt mit Anmerkungen ausgedrückt werden, an einem anderen Ort gespeichert werden, und häufig wurden XML-Dateien verwendet. Es ist jedoch bequemer, Anmerkungen zu verwenden, da sie zum Java-Code selbst gehören und daher viel einfacher zu bearbeiten sind als XML.
Verwendung von Anmerkungen:
... schauen Sie sich zum Beispiel das Projekt Lombok an , das mithilfe von Anmerkungen definiert, wie
equals
oderhashCode
Methoden generiert werden sollen.quelle
Es gibt mehrere Anwendungen für Java-Anmerkungen. Erstens können sie vom Compiler (oder von Compiler-Erweiterungen) verwendet werden. Betrachten Sie zum Beispiel die Annotation Override :
Dieser ist tatsächlich in das Java JDK integriert. Der Compiler signalisiert einen Fehler, wenn eine Methode damit markiert ist, die eine von einer Basisklasse geerbte Methode nicht überschreibt. Diese Anmerkung kann hilfreich sein, um den häufigen Fehler zu vermeiden, bei dem Sie tatsächlich beabsichtigen, eine Methode zu überschreiben, dies jedoch nicht tun, da die in Ihrer Methode angegebene Signatur nicht mit der Signatur der überschriebenen Methode übereinstimmt:
Ab JDK7 sind Anmerkungen für jeden Typ zulässig. Diese Funktion kann jetzt für Compiler-Annotationen wie NotNull verwendet werden , wie in:
Dadurch kann der Compiler Sie vor unsachgemäßer / ungeprüfter Verwendung von Variablen und Nullwerten warnen .
Eine weitere erweiterte Anwendung für Anmerkungen umfasst die Reflexion und die Verarbeitung von Anmerkungen zur Laufzeit. Dies ist (glaube ich) das, was Sie im Sinn hatten, als Sie von Anmerkungen als "Ersatz für XML-basierte Konfiguration" sprachen. Dies ist die Art der Annotationsverarbeitung, die beispielsweise von verschiedenen Frameworks und JCP-Standards (Persistenz, Abhängigkeitsinjektion, wie Sie es nennen) verwendet wird, um die erforderlichen Metadaten und Konfigurationsinformationen bereitzustellen.
quelle
Anmerkungen sind eine Form von Metadaten (Daten zu Daten), die einer Java-Quelldatei hinzugefügt werden. Sie werden hauptsächlich von Frameworks verwendet, um die Integration von Client-Code zu vereinfachen. Ein paar Beispiele aus der Praxis:
JUnit 4 - Sie fügen die
@Test
Annotation zu jeder Testmethode hinzu, die der JUnit-Runner ausführen soll. Es gibt auch zusätzliche Anmerkungen zum Einrichten von Tests (wie@Before
und@BeforeClass
). All dies wird vom JUnit-Läufer verarbeitet, der die Tests entsprechend ausführt. Man könnte sagen, es ist ein Ersatz für die XML-Konfiguration, aber Anmerkungen sind manchmal leistungsfähiger (sie können beispielsweise Reflektion verwenden) und sie befinden sich auch näher an dem Code, auf den sie verweisen (die@Test
Anmerkung befindet sich direkt vor der Testmethode, also dem Zweck von dieser Methode ist klar - dient auch als Dokumentation). Die XML-Konfiguration kann andererseits komplexer sein und viel mehr Daten enthalten als Anmerkungen.Terrakotta - verwendet sowohl Anmerkungen als auch XML-Konfigurationsdateien. Beispielsweise
@Root
teilt die Annotation der Terracotta-Laufzeit mit, dass das annotierte Feld ein Stamm ist und sein Speicher von VM-Instanzen gemeinsam genutzt werden sollte. Die XML-Konfigurationsdatei wird verwendet, um den Server zu konfigurieren und ihm mitzuteilen, welche Klassen instrumentiert werden sollen.Google Guice - Ein Beispiel wäre die
@Inject
Annotation, bei der die Guice-Laufzeit bei Anwendung auf einen Konstruktor anhand der definierten Injektoren nach Werten für jeden Parameter sucht. Die@Inject
Annotation ist mit XML-Konfigurationsdateien nur schwer zu replizieren, und ihre Nähe zum Konstruktor, auf den sie verweist, ist sehr nützlich (stellen Sie sich vor, Sie müssen in einer großen XML-Datei suchen, um alle von Ihnen eingerichteten Abhängigkeitsinjektionen zu finden).Hoffentlich habe ich Ihnen einen Eindruck davon gegeben, wie Anmerkungen in verschiedenen Frameworks verwendet werden.
quelle
Anmerkungen in Java bieten ein Mittel zur Beschreibung von Klassen, Feldern und Methoden. Im Wesentlichen handelt es sich um eine Form von Metadaten, die einer Java-Quelldatei hinzugefügt werden. Sie können die Semantik eines Programms nicht direkt beeinflussen. Anmerkungen können jedoch zur Laufzeit mit Reflection gelesen werden. Dieser Vorgang wird als Introspection bezeichnet. Dann könnte es verwendet werden, um Klassen, Felder oder Methoden zu ändern.
Diese Funktion wird häufig von Bibliotheken und SDKs (Ruhezustand, JUnit, Spring Framework) ausgenutzt, um die Codemenge zu vereinfachen oder zu reduzieren, die ein Programmierer ausführen würde, wenn er nicht mit diesen Bibliotheken oder SDKs arbeiten würde Reflexionsarbeit Hand in Hand in Java.
Wir können auch die Verfügbarkeit einer Anmerkung auf Kompilierungszeit oder Laufzeit beschränken. Nachfolgend finden Sie ein einfaches Beispiel zum Erstellen einer benutzerdefinierten Anmerkung
Driver.java
TestAlpha.java
IssueInfo.java
quelle
Nicht vollständig, aber eine Konfiguration, die eng mit Codestrukturen übereinstimmt (z. B. JPA-Zuordnungen oder Abhängigkeitsinjektion im Frühjahr), kann häufig durch Anmerkungen ersetzt werden und ist dann in der Regel weniger ausführlich, nervig und schmerzhaft. Nahezu alle bemerkenswerten Frameworks haben diesen Wechsel vorgenommen, obwohl die alte XML-Konfiguration normalerweise als Option verbleibt.
quelle
Es gibt 2 Ansichten von Anmerkungen
In der Benutzeransicht funktionieren Anmerkungen meistens wie eine Verknüpfung, speichern einige Tastenanschläge oder machen Ihr Programm besser lesbar
Herstelleransicht, die Ansicht des Prozessors zur Annotation ist eher eine leichtgewichtige "Schnittstelle", Ihr Programm konfrontiert ETWAS, ohne jedoch die bestimmte Schnittstelle explizit "zu implementieren" (hier auch als Annotation bezeichnet).
zB in jpa definieren Sie so etwas wie
anstatt
beide sprechen dasselbe "Foo ist eine Entitätsklasse"
quelle
Wo Anmerkungen verwendet werden können
Java SE 8 Update: Anmerkungen können auch auf die Verwendung von Typen angewendet werden. Hier sind einige Beispiele:
Ausdruck für die Erstellung von Klasseninstanzen:
neues @Interned MyObject ();
Typ gegossen:
myString = (@NonNull String) str;
implementiert Klausel:
Klasse UnmodizableList implementiert @Readonly List <@Readonly T> {...}
Ausgelöste Ausnahmeerklärung:
void monitorTemperature () löst @Critical TemperatureException aus {...}
quelle
Frameworks wie Hibernate, in denen viele Konfigurationen / Zuordnungen erforderlich sind, verwenden Anmerkungen stark.
Schauen Sie sich die Anmerkungen zum Ruhezustand an
quelle
JPA (aus Java EE 5) ist ein hervorragendes Beispiel für die (Über-) Verwendung von Anmerkungen. Java EE 6 wird auch Annotationen in vielen neuen Bereichen einführen, wie z. B. RESTful-Webservices und neue Annotationen für jede der guten alten Servlet-APIs.
Hier sind mehrere Ressourcen:
Es sind nicht nur die Konfigurationsspezifikationen, die durch Anmerkungen übernommen werden sollen, sondern sie können auch zur Steuerung des Verhaltens verwendet werden. Sie sehen dies bereits in den JAX-RS-Beispielen des Java EE 6.
quelle
Es ist nützlich, um Ihre Klassen entweder auf Methoden-, Klassen- oder Feldebene mit Anmerkungen zu versehen, etwas an dieser Klasse, das nicht ganz mit der Klasse zusammenhängt.
Sie können eigene Anmerkungen haben, mit denen bestimmte Klassen nur als Test verwendet werden. Es kann einfach zu Dokumentationszwecken dienen oder Sie können es erzwingen, indem Sie es während der Kompilierung eines Produktionsversionskandidaten herausfiltern.
Sie können Anmerkungen verwenden, um einige Metadaten zu speichern, z. B. in einem Plugin-Framework, z. B. den Namen des Plugins.
Es ist nur ein weiteres Werkzeug, es hat viele Zwecke.
quelle
Es fügt zusätzliche Informationen über Code durch (a) Compilerprüfung oder (b) Codeanalyse hinzu
** **.
** **.
Typ 1) Anmerkungen zum Java-Code:
Typ 2) Anmerkungen, die auf andere Anmerkungen angewendet werden:
** **.
** http://en.wikipedia.org/wiki/Java_annotation#Custom_annotations
Um besser zu verstehen, versuchen Sie es unter dem Link: Arbeiten Sie mit Beispielen
http://www.javabeat.net/2007/08/annotations-in-java-5-0/
quelle
Anmerkungen können als Alternative zu externen Konfigurationsdateien verwendet werden, können jedoch nicht als vollständiger Ersatz angesehen werden. Es gibt viele Beispiele, in denen Annotationi zum Ersetzen von Konfigurationsdateien verwendet wurde, z. B. Hibernate, JPA, EJB 3 und fast alle in Java EE enthaltenen Technologien.
Auf jeden Fall ist dies nicht immer eine gute Wahl. Der Zweck der Verwendung von Konfigurationsdateien besteht normalerweise darin, den Code von den Details der Umgebung zu trennen, in der die Anwendung ausgeführt wird. In solchen Situationen und meistens, wenn die Konfiguration verwendet wird, um die Anwendung der Struktur eines externen Systems zuzuordnen, sind Anmerkungen kein guter Ersatz für die Konfigurationsdatei, da Sie die Details des externen Systems in den Quellcode von aufnehmen können Ihre Bewerbung. Hier sind externe Dateien als die beste Wahl anzusehen, andernfalls müssen Sie den Quellcode ändern und jedes Mal neu kompilieren, wenn Sie ein relevantes Detail in der Ausführungsumgebung ändern.
Anmerkungen eignen sich viel besser, um den Quellcode mit zusätzlichen Informationen zu dekorieren, die Verarbeitungswerkzeuge sowohl zur Kompilierungszeit als auch zur Laufzeit anweisen, Klassen und Klassenstrukturen auf besondere Weise zu behandeln.
@Override
und JUnits@Test
sind gute Beispiele für eine solche Verwendung, die bereits in anderen Antworten ausführlich erläutert wurden.Am Ende ist die Regel immer dieselbe: Behalten Sie die Dinge, die sich mit der Quelle ändern, in der Quelle und die Dinge, die sich unabhängig von der Quelle ändern, außerhalb der Quelle.
quelle
Java EE 5 bevorzugt die Verwendung von Anmerkungen gegenüber der XML-Konfiguration. In EJB3 werden beispielsweise die Transaktionsattribute einer EJB-Methode mithilfe von Anmerkungen angegeben. Sie verwenden sogar Anmerkungen, um POJOs als EJBs zu markieren und bestimmte Methoden als Lebenszyklusmethoden anzugeben, anstatt die Implementierung einer Schnittstelle zu erfordern.
quelle
Der Zweck einer Java-Annotation besteht einfach darin, dem annotierten Programmelement Informationen zuzuordnen. Java-Annotationen können als Modifikatoren in jeder Deklaration verwendet werden, unabhängig davon, ob Paket, Klasse (einschließlich Aufzählungen), Schnittstelle (einschließlich Annotationstypen), Feld, Methode, formaler Parameter, Konstruktor oder lokale Variable.
Java-Annotationen können auch für Enum-Konstanten verwendet werden. Solche Annotationen werden unmittelbar vor der Enum-Konstante platziert, die sie annotieren. Java-Annotationen werden herkömmlicherweise vor allen anderen Modifikatoren platziert, dies ist jedoch keine Voraussetzung. Sie können frei mit anderen Modifikatoren gemischt werden.
Lesen Sie ausführlich über Java-Anmerkungen .
quelle
Im Folgenden finden Sie einige Stellen, an denen Sie Anmerkungen verwenden können.
Unter diesem Link finden Sie weitere Informationen zu Anmerkungen.
Über diesen Link können Sie sehen, wie Anmerkungen zum Erstellen einer einfachen Testsuite verwendet werden.
quelle