@Retention是个元注解,用于指定注解的生命周期,即注解在何时有效。
RetentionPolicy 是一个枚举类,定义了以下三种保留策略:

  1. RetentionPolicy.RUNTIME
    作用:注解会被保留到 运行时,可以通过反射机制在运行时读取注解信息。
    典型用途:
    框架或库需要在运行时动态处理注解的场景(如 Spring 的 @Autowired、JUnit 的 @Test)。
    通过反射获取注解元数据,实现动态逻辑(如依赖注入、AOP、序列化等)。

示例:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyRuntimeAnnotation {
    String value() default "";
}
  1. RetentionPolicy.SOURCE
    作用:注解仅在 源码阶段 保留,编译时会被丢弃,不会出现在字节码文件中。
    典型用途:
    静态代码分析(如 @Override 检查方法是否重写父类方法)。
    代码生成工具(如 Lombok 的 @Getter、@Setter 在编译时生成代码)。
    IDE 提示或警告(如 @Deprecated 标记废弃方法)。

示例:

@Retention(RetentionPolicy.SOURCE)
public @interface MySourceAnnotation {
    String comment();
}
  1. RetentionPolicy.CLASS
    作用:注解会被保留到 字节码文件 中,但运行时不可见(JVM 不会加载)。
    典型用途:
    编译后的字节码处理工具(如某些字节码增强框架)。
    某些注解处理器(APT)可能在编译后阶段处理注解。

示例:

@Retention(RetentionPolicy.CLASS)
public @interface MyClassAnnotation {
    String config();
}

我爱吃炒煤
1 声望0 粉丝

« 上一篇
斯泊润瑟柯思