元注解
修饰注解的注解,对注解进行说明
@Target
1、作用
描述注解的作用位置(即:被修饰的注解可以用在什么地方)
2、修饰的注解详细使用位置
注解可以用于修饰 packages、types(类、接口、枚举、注解类)、类成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数),在定义注解类时使用了@Target 能够更加清晰的知道它能够被用来修饰哪些对象,它的取值范围定义在ElementType 枚举中
public enum ElementType {
/** 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 //使用类型的任何地方
}
@Retention
作用
描述注解的保留范围(即:注解保留到什么时候)
取值范围
@Retention源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* Returns the retention policy.
* @return the retention policy
*/
RetentionPolicy value();
}
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 //运行时保留,可通过反射获取注解信息
}
@Documented
作用
描述在使用javadoc工具生成帮助文档时是否其注解信息
@Inherited
作用
使被它修饰的注解具有继承性(例:A被带有@Inherited修饰的注解@SpringBootApplication修饰,其子类B自动具有@SpringBootApplication注解)