Wenn eine Klasse mit einer Annotation versehen ist, muss die Definition dieser Annotation im Klassenpfad der Laufzeit enthalten sein, damit die Klasse verwendet werden kann? Zum Beispiel angesichts der Anmerkung
%Vor%kann ich das Programm
ausführen %Vor%ohne Component.class im Klassenpfad? (In meinem Test könnte ich, aber ist dieses Verhalten durch die Spezifikation definiert?)
Ich frage, weil es widersprüchliche Ansprüche , ob die Verwendung einer Anmerkung aus einer Bibliothek eine Abhängigkeit von dieser Bibliothek erzeugt.
Laufzeit-Annotationen sind Metainformationen, die zur Laufzeit vom Annotationsprozessor verarbeitet werden. Wenn zur Laufzeit ein Zugriff auf die Annotation besteht, fügen Sie auf jeden Fall Annotationen im Klassenpfad hinzu. Zum Beispiel brauchen Junit definitiv die Annotationen im Klassenpfad, um Testmethoden zu bestimmen.
Wenn die Annotation nicht verarbeitet wird, ist kein Classpath erforderlich.
Ich würde erwarten, dass sogar ein AccessibleObject.getAnnotations()
Ausnahmen verursachen würde. Es ist sicher für die Annotationstypen im Klassenpfad.
Ja, Sie können das Programm mit ausführen, ohne Component.class im Klassenpfad zu haben. Mehr Details hier: Warum verursacht eine fehlende Annotation nicht? eine ClassNotFoundException zur Laufzeit?
Tags und Links java annotations