java元注解
目录
@Retention
注释保留在哪个阶段的意思
比如: @Retention(RetentionPolicy.SOURCE) 注解存在阶段是保留在源码(编译期),在class字节码文件中不包含。
@Retention(RetentionPolicy.CLASS) 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME) 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target
表示注解作用(使用) 的范围,可以是类上使用,方法上使用,方法参数上使用 等。
比如: @Target(ElementType.TYPE) 作用接口、类、枚举、注解
@Target(ElementType.FIELD) 作用属性字段、枚举的常量
@Target(ElementType.METHOD) 作用方法
@Target(ElementType.PARAMETER) 作用方法参数
@Target(ElementType.CONSTRUCTOR) 作用构造函数
@Target(ElementType.LOCAL_VARIABLE)作用局部变量
@Target(ElementType.ANNOTATION_TYPE)作用于注解(@Retention注解中就使用该属性)
@Target(ElementType.PACKAGE) 作用于包
@Target(ElementType.TYPE_PARAMETER) 作用于类型泛型,即泛型方法、泛型类、泛型接口 (jdk1.8加入)
@Target(ElementType.TYPE_USE) 类型使用.可以用于标注任意类型除了 class (jdk1.8加入)
一般比较常用的是ElementType.TYPE类型
@Documented
该注解是类似注释一样,可以将注解中的元素添加到Javadoc 文档中方便查看
@Inherited
作用跟类继承 类似的注解,父类如果有注解(注解里面包含@Inherited)则子类会继承 “父类实现了@Inherited的注解”
注意,如果是接口上的注解实现了@Inherited,子类将不继承
@Repeatable
java8之前,同一个注解不能重复使用在目标元素上(类)
@Repeatable(参数:容器) 在注解的括号里面需指定容器注解(一般容器用数组等,比如String[] )
@RepeatableAnnotation("值1")
@RepeatableAnnotation("值2")
这样被@Repeatable修饰的这个注解就可以在代码中重复使用