1. 元注解的基本介绍
- JDK 的元 Annotation 用于修饰其他 Annotation
- 元注解: 本身作用不大,看源码时,可以知道是干什么用的
2. 元注解的分类
Retention 指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME Target 指定注解可以在哪些地方使用Documented 指定该注解是否会在 javadoc 体现Inherited 子类会继承父类注解
2.1 @Retention 注解
- 只能用于修饰一个
Annotation 定义, 用于指定该 Annotation 可以保留多长时间,@Rentention 包含一个 RetentionPolicy 类型的成员变量,使用 @Rentention 时必须为该 value 成员变量指定值 @Retention 的三种值
RetentionPolicy.SOURCE : 编译器使用后,直接丢弃这种策略的注释RetentionPolicy.CLASS : 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这也是默认值。RetentionPolicy.RUNTIME :编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解,程序可以通过反射获取该注解
-
三种值注入的时间如下: -
演示案例:Override 注解源码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
2.2 @Target 注解
- 用于修饰
Annotation 定义,用于指定被修饰的Annotation 能用于修饰哪些程序元素 @Target 也包含一个名为value 的成员变量。- @Target源码说明:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
- 演示案例:
@Deprecated 源码 - 可以看到 @Deprecated 注解 Target 上的注解范围有:构造器、字段、局部变量、方法、包、参数、类型。
2.3 @Documented 注解
-
@Documented :用于指定被该元 Annotation修饰的Annotation类将被javadoc 工具提取成文档,即在生成文档时,可以看到该注解。 -
说明:定义为Documented 的注解必须设置Retention 值为RUNTIME 。 -
案例演示:@Deprecated 注解源码如下 -
可以看到文档上的 @Deprecated 注解被保留了,就是因为 @Deprecated 注解上有 @Documented ,在 javadoc 的时候就会保留 @Deprecated 这个注解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
2.4 @Inherited 注解
|