1. @Target

   Target设定注解使用范围,通过ElementType来指定注解可使用范围的枚举集合 。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {

   ElementType.ANNOTATION_TYPE表示注解在被@interface修饰的类型,否则报错。

   同理,常用的ElementType.METHOD表示注解在方法上,否则报错。

   ElementType用法

取值注解使用范围
TYPE类,接口上或者枚举申明
FIELD字段申明和枚举常量
METHOD方法
PARAMETER参数
CONSTRUCTOR构造方法
LOCAL_VARIABLE局部变量
ANNOTATION_TYPE注解类型上(被@interface修饰的类型)
PACKAGE安装包申明
TYPE_PARAMETER类型参数申明
TYPE_USE使用一种类型

 

2.@Documented

   Documented注解表明这个注释是由 javadoc记录的。 如果一个类型声明被注释了文档化,它的注释成为公共API的一部分。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {

3.@Retention

   @Retention与RetentionPolicy这个枚举类型的常量一起指定注释要保留多长时间

   RetentionPolicy描述保留注释的各种策略

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {

   RetentionPolicy用法:

取值解释
SOURCE编译器丢弃注释
CLASS编译器会记录在文件中,默认运行时不需要虚拟机保留
RUNTIME编译器记录在文件中,由虚拟机运行时保留,便于读取。

 

更多推荐

Springboot常用注解之@Target,@Documented和@Retention