JDK从1.5开始提供注解,除了内置注解,还有4个元注解用了定义和解释注解
第一个 @Target
标志注解可以在那些地方可以使用
public enum ElementType { /** Class, interface (including annotation type), or enum declaration */ TYPE, //:用于描述类、接口(包括注解类型) 或enum声明 /** 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, //1.8版本开始,描述类、接口或enum参数的声明 /** * Use of a type * * @since 1.8 */ TYPE_USE //:1.8版本开始,描述一种类、接口或enum的使用声明 }
第二个:@Retention
描述注解的生命周期,表示需要在什么级别保存该注解,即保留的时间长短。取值类型(RetentionPolicy)有以下几种:
SOURCE:在源文件中有效(即源文件保留)
CLASS:在class文件中有效(即class保留)
RUNTIME:在运行时有效(即运行时保留)
第三个:@Documented
描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。它是一个标记注解,没有成员。
第四个:@Inherited
用于表示某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。