@Documented – 注解是否将包含在JavaDoc中
@Retention – 什么时候使用该注解
@Target – 注解用于什么地方
@Inherited – 是否允许子类继承该注解
@Repeatable - 是否可重复注解,jdk1.8引入

@Retention 定义注解的生命周期

  • RetentionPolicy.SOURCE :

仅存在于源代码中,编译阶段会被丢弃,不会包含于class字节码文件中。@Override, @SuppressWarnings都属于这类注解。

  • RetentionPolicy.CLASS :

默认策略,在class字节码文件中存在,在类加载的时被丢弃,运行时无法获取到。
RetentionPolicy.RUNTIME : 始终不会丢弃,可以使用反射获得该注解的信息。自定义的注解最常用的使用方式。

@Target 注解的作用目标

  • ElementType.TYPE:

类、接口、注解、enum

  • ElementType.CONSTRUCTOR:

构造函数

  • ElementType.FIELD:

成员变量、对象、属性、枚举的常量

  • ElementType.LOCAL_VARIABLE:

局部变量

  • ElementType.METHOD:

方法

  • ElementType.PACKAGE:

  • ElementType.PARAMETER:

参数

  • ElementType.ANNOTATION_TYPE:

注解

  • ElementType.TYPE_PARAMETER

类型参数,表示这个注解可以用在 Type的声明式前,jdk1.8引入。

  • ElementType.TYPE_USE

类型的注解,表示这个注解可以用在所有使用Type的地方(如:泛型,类型转换等),jdk1.8引入。

@Inherited

定义该注解和子类的关系,使用此注解声明出来的自定义注解,在使用在类上面时,子类会自动继承此注解,否则,子类不会继承此注解。注意,使用Inherited声明出来的注解,只有在类上使用时才会有效,对方法,属性等其他无效。*