如果使用注释对类进行注释,那么该注释的定义是否必须位于运行时类路径中才能使用该类?例如,给定注释
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 {}
我可以执行程序
@Component
public class Test {
public static void main(String[] args) {
System.out.println("It worked!");
}
}
在类路径中没有Component.class? (在我的测试中我可以,但这个行为是由规范定义的吗?)
我问,因为有conflicting claims是否使用库中的注释会创建对该库的依赖。
答案 0 :(得分:4)
运行时注释是由运行时注释处理器处理的元信息。如果在运行时可以访问注释,则必须在类路径中添加注释。例如,junit肯定需要类路径中的注释来确定测试方法。
如果没有完成注释处理,则无需使用类路径。
我希望即使AccessibleObject.getAnnotations()
会导致异常。对类路径中的注释类型是安全的。
答案 1 :(得分:0)
是的,你可以在类路径中没有Component.class的情况下执行程序。更多详情:Why doesn't a missing annotation cause a ClassNotFoundException at runtime?