12

如果一个类被注解,那么该注解的定义是否必须在运行时类路径中才能使用该类?例如,给定注释

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?(在我的测试中我可以,但是这种行为是由规范定义的吗?)

我问是因为存在冲突的声明,是否使用库中的注释会创建对该库的依赖。

4

2 回答 2

6

运行时注解是注解处理器在运行时处理的元信息。如果在运行时可以访问注解,那么您肯定会在类路径中添加注解。例如junit肯定需要类路径中的注释确定测试方法。

如果没有对注解进行处理,则不需要将其作为类路径。

于 2012-04-05T17:27:28.510 回答
1

是的,您可以在类路径中没有 Component.class 的情况下执行程序。此处有更多详细信息:为什么缺少注释在运行时不会导致 ClassNotFoundException?

于 2017-11-10T10:30:27.430 回答