Java -Anmerkungen liefern einige Informationen über den Code, wirken sich jedoch nicht direkt auf den von ihm kommentierten Codeinhalt aus. In diesem Tutorial lernen wir über Java -Annotationen, die Anpassung von Anmerkungen, die Verwendung von Anmerkungen und die Analyse von Anmerkungen durch Reflexion kennen.
Java 1.5 führt Anmerkungen ein, und viele Java -Frameworks verwenden derzeit Annotationen in großem Umfang wie Hibernate, Jersey und Frühling. Anmerkungen werden als Metadaten des Programms in das Programm eingebettet. Anmerkungen können durch einige Parsing -Tools oder Kompilierwerkzeuge analysiert werden. Wir können auch erklären, dass Anmerkungen einen Einfluss auf die Zusammenstellung oder Ausführung haben.
Bevor die Anmerkungen verwendet werden, durchliegen die Programmquellendaten nur Java -Anmerkungen und Javadoc, aber die Anmerkungen bieten viel mehr als diese. Anmerkungen enthalten nicht nur Metadaten, sondern können auch auf die Ausführungssequenz des Programms reagieren. Der Annotationsinterpreter kann die Ausführungsreihenfolge des Programms durch Annotation lösen. In Jersey WebService fügen wir beispielsweise einen ** Pfad ** Annotation in Form einer URI -Zeichenfolge zur Methode hinzu. Während des Programms des Programms bestimmt der Triker -Interpreter, dass die Methode die angegebene URI aufruft.
Erstellen Sie Java -benutzerdefinierte Anmerkungen
Das Erstellen einer benutzerdefinierten Annotation ähnelt dem Erstellen einer Schnittstelle, das Schlüsselwort der annotierten Schnittstelle muss jedoch mit dem @ -Symbol beginnen. Wir können Methoden zur Annotation deklarieren. Schauen wir uns zunächst das Annotationsbeispiel an, und dann werden wir einige seiner Merkmale diskutieren.
Paket com.journaldev.Annotations; Import Java.lang.Annotation.Documented; Import java.lang.annotation.elementtype; Import Java.lang.annotation @Documented@target (elementtype.method)@erbt@retention (retentionPolicy.runtime) public @Interface methodInfo {String Author () Standard 'Pankaj'; String date (); int revision () Standard 1; String Comments ();} Die Annotationsmethode kann keine Parameter tragen.
Die Rückgabewerttypen der Annotationsmethode sind beschränkt auf: Grundtypen, Zeichenfolge, Enum, Annotation oder Arrays dieser Typen;
Annotationsmethoden können Standardwerte haben.
Anmerkungen selbst können Meta -Anmerkungen enthalten, mit denen andere Anmerkungen kommentiert werden.
Hier sind vier Arten von Meta -Anmerkungen :
1. @Documented - zeigt an, dass die Elemente, die diese Annotation haben, durch Tools wie Javadoc dokumentiert werden können. Dieser Typ sollte verwendet werden, um jene Typen zu kommentieren, die die Erklärung des Kunden zur Verwendung kommentierter Elemente beeinflussen. Wenn eine Erklärung mit dokumentiertem kommentiert wird, wird diese Art der kommentierten Annotation als öffentliche API für das kommentierte Programmmitglied verwendet.
2. @Target - Zeigt den Umfang der Programmelemente an, die Anmerkungen dieses Typs kommentieren können. Die Werte dieser Meta -Annotation können Typ, Methode, Konstruktor, Feld usw. sein. Wenn die Ziel -Meta -Annotation nicht erscheint, kann die definierte Annotation auf ein beliebiges Element des Programms angewendet werden.
3.. @Inherited - Zeigt an, dass der Annotationstyp automatisch geerbt wird. Wenn der Benutzer diesen Meta -Annotationstyp in der aktuellen Klasse abfragt und die Deklaration der aktuellen Klasse diesen Meta -Annotationstyp nicht enthält, wird auch automatisch befragt, ob die übergeordnete Klasse der aktuellen Klasse über eine erbte Meta -Annotation verfügt. Diese Aktion wird wiederholt, um zu wissen, dass der Annotationstyp gefunden wurde, und die übergeordnete Klasse auf der oberen Ebene wird abfragt.
4.@Retention - Gibt an, wie lange die Annotation beibehalten wird. Die RetentionPolicy -Werte sind Quelle, Klasse, Laufzeit.
Java eingebaute Anmerkungen
Java bietet drei eingebaute Anmerkungen.
1. @Override - Wenn wir die Methode in der Elternklasse neu schreiben möchten, müssen wir diese Annotation verwenden, um den Compiler darüber zu informieren, dass wir diese Methode neu schreiben möchten. Auf diese Weise fordert der Compiler eine Fehlermeldung auf, wenn die Methode in der übergeordneten Klasse entfernt oder Änderungen auftreten.
2. @deprecated - Wenn der Compiler weiß, dass eine Methode nicht empfohlen wird, sollten wir diese Annotation verwenden. Java empfiehlt diese Annotation in Javadoc. Wir sollten angeben, warum diese Methode nicht empfohlen wird, und alternative Methoden.
3.. Die Aufbewahrungsrichtlinie ist Quelle (Anmerkung des Übersetzers: In der Quelldatei gültig) und vom Compiler verworfen.
Schauen wir uns ein Beispiel für integrierte Anmerkungen in Java an, siehe die oben genannten benutzerdefinierten Anmerkungen.
Paket com.journaldev.Annotations; importieren java.io.filenotfoundException; import Java.util.ArrayList; Import Java.util.List; public class AnnotationExample {public static void main (string [] args) {} @override @methodInfo (Autor = 'Pankaj', Kommentare = 'Hauptmethode', Date = 'Nov 17 2012', Revision = 1) public String toString () {return 'overiden tostring methode'; void oldMethod() { System.out.println('old method, don't use it.');} @SuppressWarnings({ 'unchecked', 'deprecation' })@MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 10)public static void genericsTest() throws FileNotFoundException { List l = new ArrayList (); L.Add ('ABC'); OldMethod ();}}Ich glaube, dieses Beispiel kann selbsterklärend sein und in verschiedenen Szenarien angezeigt werden.
Java -Annotationsanalyse
Wir werden die Reflexionstechnologie einsetzen, um die Anmerkungen von Java -Klassen zu analysieren. Anschließend sollte die Annotationsretention auf der Laufzeit festgelegt werden. Andernfalls sind die Annotationsinformationen der Java -Klasse während der Ausführung nicht verfügbar, sodass wir keine Daten in Bezug auf die Annotation abrufen können.
Paket com.journaldev.Annotations; Import Java.lang.Annotation.Annotation; Import Java.lang.reflect.Method; public class AnnotationParsing { public static void main(String[] args) { try { for (Method method : AnnotationParsing.class .getClassLoader() .loadClass(('com.journaldev.annotations.AnnotationExample')) .getMethods()) { // checks if MethodInfo annotation is present for the method if (method.IsAnnotationPresent (com.journaldev.annotations.methodinfo.class)) {try {// alle Annotationen in der Methode für (Annotation anno: method.getDeclaredAnnotations ()) {System.out.println ('Annotation in Method' + Method + ':' + Anno); } MethodInfo methodAnno = method.getAnnotation (methodInfo.class); if (methodanno.revision () == 1) {System.out.println ('Methode mit Revision Nr. 1 ='+ Methode); }} catch (throwable ex) {ex.printstacktrace (); }}}} catch (SecurityException | classNotFoundException e) {e.printstacktrace (); }}} Ausführen des obigen Programms Ausgabe:
Annotation in der Methode 'Public java.lang.String com.journaldev.annotations.annotationExample.toString ()': @com.journaldev.annotations.methodinfo (Author = Pankaj, Revision = 1, Kommentare = Hauptmethode, Main com.journaldev.Annotations.annotationExample.toString () Annotation in der Methode 'öffentlicher statischer void com.journaldev.Annotations.annotationExample.oldMethod ()': @java.lang.Deprecated () Annotation in Methode 'Public static void com.journaldev.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotation.Annotations.Annotations.Annotations.Annotation.Annotations.Annotations.Annotation.Antation.Antations.Annotations.Annotations.Annotations.:): @com.journaldev.Annotations.methodinfo (Autor = Pankaj, Revision = 1, Kommentare = veraltete Methode, Datum = 17. November 2012) Methode mit Revision Nr. 1 = öffentliche statische void com.journaldev.Annotations.AnnotationExample.AldMethod () Annotation in Methode static static static void com.journaldev.Annotation.Annotation java.io.filenotfoundexception ': @com.journaldev.annotations.methodinfo (Autor = Pankaj, Revision = 10, Kommentare = Hauptmethode, Datum = 17. November 2012)
Das ist alles um dieses Tutorial, und hoffentlich können Sie etwas daraus lernen.