Java 注解反射
什么是Java注解反射
Java注解反射是指通过Java反射API来获取和处理类、方法、字段等元素上的注解信息的技术。注解本身只是元数据,如果没有配套的处理机制,注解只是"静静地躺"在那里,不会发挥任何作用。而反射机制正是处理注解的重要手段之一。
通过注解反射,我们可以在运行时:
- 检测一个类、方法或字段是否包含特定注解
- 获取注解的属性值
- 根据注解信息采取相应操作
注解的基础知识
在深入了解注解反射之前,我们先简单回顾一下Java注解的基础知识:
注解的定义
@Retention(RetentionPolicy.RUNTIME) // 注解在运行时可见
@Target({ElementType.TYPE, ElementType.METHOD}) // 注解可应用于类和方法
public @interface MyAnnotation {
String value() default "默认值";
int count() default 0;
String[] tags() default {};
}
重要的元注解
-
@Retention: 指定注解的保留策略
- RetentionPolicy.SOURCE: 只在源代码中保留
- RetentionPolicy.CLASS: 保留到编译期,不加载到JVM中
- RetentionPolicy.RUNTIME: 保留到运行时,可通过反射访问
-
@Target: 指定注解可应用的元素类型
- ElementType.TYPE: 类、接口、枚举
- ElementType.FIELD: 字段、枚举常量
- ElementType.METHOD: 方法
- ElementType.PARAMETER: 方法参数
- ElementType.CONSTRUCTOR: 构造方法
- ElementType.LOCAL_VARIABLE: 局部变量
- ElementType.ANNOTATION_TYPE: 注解类型
- ElementType.PACKAGE: 包
备注
只有设置了@Retention(RetentionPolicy.RUNTIME)
的注解才能通过反射API获取到,这一点在使用注解反射时非常重要!