元注解
就是只能用来注释普通注解的注解,不能直接注解代码。
Java5时支持5中注解 @Dcocumented @Retention @Target @Inherited
@Documented
被修饰的注解能够自动加入到javadoc中
@Retention
用来设置注解的级别
@Retention(RetentionPolicy.CLASS)
RetentionPolicy是enum类型的
有三个级别
RetentionPolicy.CLASS
CLASS代表字节码级别的,注解从在于源码和自己吗文件中,
RetentionPolicy.SOURCE
代表源码级别的,只能存在于源码中,主要功能用于和与编译器交互和代码检测。@Override,@SuppressWarings,这个级别的框架额外效率损耗发生在编译时。
RetentionPolicy.RUNTIME
Runtime代表运行时级别,注解存在于源码,字节码,java虚拟机中,主要用于运行时反射获取相关的信息,这个级别的框架额外的效率损耗发生在程序运行时。
@Target
不加元注解@Target的情况下,注解可以修饰多种元素,类,属性,方法等。要是想限定注解的使用范围需要加入@Target注解
@Target(ElementType.METHOD)
ElementType.ANNOTATION_TYPE
能修饰注解
ElementType.CONSTRUCTOR
能修饰构造器
ElementType.FIELD
能修饰成员变量
ElementType.LOCAL_VARIABLE
能够修饰局部变量
ElementType.METHOD
能够修饰方法
ElementType.PACKAGE
能够修饰包
ElementType.PARAMETER
能够修饰参数
ElementType.TYPE
能够修饰类,接口,枚举类型
可以是多个
@Target({ElementType.TYPE,ElementType.FIELD})
可以是单个
@Target(ElementType.TYPE)
@Inherited
让注解可以被继承,但不是真正的继承。通过使用@Inherited,只可以让子类的类对象使用getAnnotations()反射获取父类被@Inherited修饰的注解