1、什么是元注解?

Java官方提供的注解 ,元注解是用来限定任何官方提供的非元注解 , 简单理解 : 修饰注解的注解是元注解

2、元注解的作用:

用来限定其他注解的生命周期,还可以限定可以使用的位置 :::tips

  • 生命周期 :源码阶段 ,字节码阶段 ,运行阶段
  • 使用的位置 :类 ,字段 ,构造方法,方法….. :::

    3、常用的元注解

    1)@Target
  • 作用:用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。例如我们刚才自己定义的Book注解 , 就没有使用@Target元注解, 那么就可以使用在任何的位置 :::tips

    1)@Target
  • 作用:用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。例如我们刚才自己定义的Book注解 , 就没有使用@Target元注解, 那么就可以使用在任何的位置 :::

  • ElementType是一个枚举类型: :::tips

  • TYPE ,类,接口,枚举,注解

  • FIELD, 成员变量 METHOD , 成员方法
  • PARAMETER , 方法参数
  • CONSTRUCTOR , 构造方法
  • LOCAL_VARIABLE , 局部变量 :::

    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 {
    } :::