@Retention
注解value有三个可选项,分别代表的意思如下:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
-
我们以lombok的@Data注解和Spring@Component注解为例,可以发现data注解对应的类型是source类型,因为@Data注解的作用是帮我们生成getter setter toString等方法。在java编译成class文件之后就没用了。
image.png
而@Component注解的类型则是Runtime
image.png
@Target
@Target注解就很简单了,就是用于指定注解可以使用的范围。用于字段、类、还是方法。
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/** Field declaration (includes enum constants) */
FIELD,
/** Method declaration */
METHOD,
/** Formal parameter declaration */
PARAMETER,
/** Constructor declaration */
CONSTRUCTOR,
/** Local variable declaration */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** Package declaration */
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE