@Retention是个元注解,用于指定注解的生命周期,即注解在何时有效。
RetentionPolicy 是一个枚举类,定义了以下三种保留策略:
- RetentionPolicy.RUNTIME
作用:注解会被保留到 运行时,可以通过反射机制在运行时读取注解信息。
典型用途:
框架或库需要在运行时动态处理注解的场景(如 Spring 的 @Autowired、JUnit 的 @Test)。
通过反射获取注解元数据,实现动态逻辑(如依赖注入、AOP、序列化等)。
示例:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyRuntimeAnnotation {
String value() default "";
}
- RetentionPolicy.SOURCE
作用:注解仅在 源码阶段 保留,编译时会被丢弃,不会出现在字节码文件中。
典型用途:
静态代码分析(如 @Override 检查方法是否重写父类方法)。
代码生成工具(如 Lombok 的 @Getter、@Setter 在编译时生成代码)。
IDE 提示或警告(如 @Deprecated 标记废弃方法)。
示例:
@Retention(RetentionPolicy.SOURCE)
public @interface MySourceAnnotation {
String comment();
}
- RetentionPolicy.CLASS
作用:注解会被保留到 字节码文件 中,但运行时不可见(JVM 不会加载)。
典型用途:
编译后的字节码处理工具(如某些字节码增强框架)。
某些注解处理器(APT)可能在编译后阶段处理注解。
示例:
@Retention(RetentionPolicy.CLASS)
public @interface MyClassAnnotation {
String config();
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。