一、注解定义
注解早在J2SE1.5就被引入到Java中,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据。
二、元注解
- Target 说明了被修饰的注解的应用范围,也就是被修饰的注解可以用来注解哪些程序元素
- Retention 表示一个注解类型会被保留到什么时候
- Inherited 表明被修饰的注解类型是自动继承的。具体解释如下:若一个注解类型被Inherited元注解所修饰,则当用户在一个类声明中查询该注解类型时,若发现这个类声明中不包含这个注解类型,则会自动在这个类的父类中查询相应的注解类型,这个过程会被重复,直到该注解类型被找到或是查找完了Object类还未找到。
- Documented 当一个注解类型被@Documented元注解所描述时,那么无论在哪里使用这个注解,都会被Javadoc工具文档化。
- Repeatable 说明该注解标识的注解可以多次使用到同一个元素的声明上。
三、Target
ElementType枚举类中的常量
- ANNOTATION_TYPE 表示该注解可以应用到其他注解上
- CONSTRUCTOR 表示可以使用到构造器上
- FIELD 表示可以使用到域或属性上
- LOCAL_VARIABLE 表示可以使用到局部变量上。
- METHOD 可以使用到方法级别的注解上。
- PACKAGE 可以使用到包声明上。
- PARAMETER 可以使用到方法的参数上
- TYPE 类、接口(包括注解类型)或enum声明
- TYPE_USE 注释所有类型的使用
- TYPE_PARAMETER 在通用类,接口,方法等中注释类型参数
四、Retention
RetentionPolicy枚举类中的常量
- SOURCE 表明这个注解会被编译器忽略,并只会保留在源代码中。
- CLASS 表明这个注解会通过编译驻留在CLASS文件,但会被JVM在运行时忽略,正因为如此,其在运行时不可见。
- RUNTIME 表示这个注解会被JVM获取,并在运行时通过反射获取。
五、常见内建注解
@Override
@SuppressWarnings
@Deprecated
@FunctionalInterface
六、自定义注解
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Inherited public @interface MethodInfo { String author() default "mk"; String date(); int version() default 1; }