Historie der Frage:
Annotationen wurden in Java 5 eingeführt, um Metainformationen in den Bytecode hinzuzufügen, ohne die Logik des Programms zu ändern. Mit Annotationen ist es einfach, Klassen und Methoden mit zusätzlichen Informationen für Frameworks, Compiler oder Parser zu versehen.
Problem:
Schlecht gestaltete oder falsch verwendete Annotationen führen zu einer komplizierten Wartung des Codes. Manchmal verwechseln Entwickler die Anwendbarkeit von Annotationen oder verstehen nicht, wie sie eigene Annotationen erstellen, und wissen nicht, dass Annotationen Parameter haben können.
Lösung:
Erstellen einer eigenen Annotation:
import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { String value() default ""; }
Verwendung der Annotation:
public class TestClass { @MyTest("Beispiel") public void testMethod() {...} }
Wichtige Merkmale:
Kann eine Annotation von einer anderen Annotation erben?
Antwort: Nein, Annotationen in Java unterstützen keine Vererbung untereinander.
Kann die Verwendung von Annotationen für alle Nachfolger einer Klasse obligatorisch gemacht werden?
Antwort: Nicht direkt. Es muss zusätzlich mit Reflection überprüft werden, ob die Annotation vorhanden ist, wobei manuell eine ähnliche Kontrolle implementiert werden muss.
Was ist der Unterschied zwischen @Retention(CLASS) und @Retention(RUNTIME)?
Antwort:
Im Projekt wurde beschlossen, die Konfiguration über XML durch Annotationen zu ersetzen, aber @Retention(RUNTIME) wurde nicht hinzugefügt.
Vorteile:
Nachteile:
Eine benutzerdefinierte Annotation @Audit wurde für Methoden eingerichtet, die die Auditierung von Geschäftsvorgängen steuert, mit der Reflection des tatsächlichen Aufrufs der Logik auf dem Server.
Vorteile:
Nachteile: