是否需要运行时类路径中的注释类文件?

时间:2012-04-05 17:10:03

标签: java annotations

如果使用注释对类进行注释,那么该注释的定义是否必须位于运行时类路径中才能使用该类?例如,给定注释

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是否使用库中的注释会创建对该库的依赖。

2 个答案:

答案 0 :(得分:4)

运行时注释是由运行时注释处理器处理的元信息。如果在运行时可以访问注释,则必须在类路径中添加注释。例如,junit肯定需要类路径中的注释来确定测试方法。

如果没有完成注释处理,则无需使用类路径。

我希望即使AccessibleObject.getAnnotations()会导致异常。对类路径中的注释类型是安全的。

答案 1 :(得分:0)

是的,你可以在类路径中没有Component.class的情况下执行程序。更多详情:Why doesn't a missing annotation cause a ClassNotFoundException at runtime?