元注解Retention

定义

元注解,顾名思义,就是对注解的注解。

其中@Reteniton注解比较重要,它的作用是:描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以被保留到什么时候) 。

一共有三种策略,定义在RetentionPolicy枚举中。

源码:

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

}

翻译一下就是:

1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件时,注解被遗弃;

2、RetentionPolicy.CLASS:注解保留到class文件,但jvm加载class文件时被遗弃,这也是默认的生命周期;

3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。


使用场景

首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。

一般如果需要在运行时去动态获取注解信息,那只能用RUNTIME策略;

如果要在编译时进行一些预处理操作,比如生成一些辅助代码,就用CLASS策略;

如果只是做一些检查性的操作,比如@SuppressWarnings,则可选用SOURCE策略。



学完,收工~

你可能感兴趣的:(元注解Retention)