2012-04-05 1 views
8

Wenn eine Klasse mit einer Anmerkung bezeichnet ist, wird die Definition dieser Anmerkung hat in dem Runtime-Classpath sein, um die Klasse zu bedienen? Zum Beispiel kann die AnmerkungSind Annotationsklassendateien im Laufzeitklassenpfad erforderlich?

import java.lang.annotation.ElementType; 
import java.lang.annotation.Target; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Retention; 
@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Component {} 

kann ich das Programm

@Component 
public class Test { 
    public static void main(String[] args) { 
     System.out.println("It worked!"); 
    } 
} 

ohne Component.class im Classpath ausführen gegeben? (In meinem Test könnte ich, aber ist dieses Verhalten durch die Spezifikation definiert?)

Ich frage, da gibt es conflicting claims ob die Verwendung einer Anmerkung aus einer Bibliothek eine Abhängigkeit von dieser Bibliothek erstellt.

+0

Verwandte Links: http://mail.openjdk.java.net/pipermail/type-annotations-dev/2011-November/000079.html, https://bugs.eclipse.org/bugs /show_bug.cgi?id=366063 (für zukünftige schnelle Referenz) – Jayan

+3

Mögliche dup: http://stackoverflow.com/questions/3567413/why-doesnt-a-missing-annotation-cause-a-classnotfoundexception-at-runtime –

+0

Danke Matt, genau das habe ich gesucht. – meriton

Antwort

4

Runtime Anmerkungen sind Metainformationen zur Laufzeit durch Annotations-Prozessor 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 bestimmen Testmethoden.

Wenn es keine Bearbeitung von Annotation ist getan wird, gibt es keine Notwendigkeit, es zu haben, den Classpath.

Ich würde erwarten, selbst ein AccessibleObject.getAnnotations() würden Ausnahmen verursachen. Es ist sicher für die Annotationstypen im Klassenpfad.

+1

AccessibleObject.getAnnotations() verursacht keine Ausnahmen mit fehlenden Annotationen im Klassenpfad - http://bugs.java.com/view_bug.do?bug_id=6322301 – kodstark