1、什么是元注解?
Java官方提供的注解 ,元注解是用来限定任何官方提供的非元注解 , 简单理解 : 修饰注解的注解是元注解
2、元注解的作用:
用来限定其他注解的生命周期,还可以限定可以使用的位置 :::tips
- 生命周期 :源码阶段 ,字节码阶段 ,运行阶段
-
3、常用的元注解
1)@Target
作用:用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。例如我们刚才自己定义的Book注解 , 就没有使用@Target元注解, 那么就可以使用在任何的位置 :::tips
1)@Target
作用:用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。例如我们刚才自己定义的Book注解 , 就没有使用@Target元注解, 那么就可以使用在任何的位置 :::
ElementType是一个枚举类型: :::tips
TYPE ,类,接口,枚举,注解
- FIELD, 成员变量 METHOD , 成员方法
- PARAMETER , 方法参数
- CONSTRUCTOR , 构造方法
-
2)@Retention
作用 :用来限定注解的生命周期 (有效范围 ) :::tips
@Documented@Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.ANNOTATION_TYPE)
- public @interface Retention {
- RetentionPolicy value();
} :::
RetentionPolicy也是一个枚举,里面包含三个枚举项 : :::tips
public enum RetentionPolicy {
- /* Annotations are to be discarded by the compiler. */
- SOURCE ,// 只能在源码阶段
- /* Annotations are to be recorded in the class file by the compiler but need not be retained by the VM at run time. This is the default behavior. */
- CLASS , // 可以到字节码阶段,默认
- /* Annotations are to be recorded in the class file by the compiler and retained by the VM at run time, so they may be read reflectively. @see java.lang.reflect.AnnotatedElement /
- RUNTIME // 可以到运行的时候 // 如果要想通过反射获取注解的数据 , 那么需要设置运行时 , 因为反射需要在运行时动态获取数据}
:::
4、使用方式
:::tips @Target(ElementType.METHOD) // Override注解只能作用在方法上@Retention(RetentionPolicy.SOURCE)
public @interface Override {
} :::