一、注解概述
Java注解(Annotation)又称Java标注,是JDK5.0引入的一种注释机制。
Java语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。
二、注解的作用
对Java中的类、方法、成员变量做标记,然后进行特殊处理,至于到要做什么处理由业务需求决定。
例如:JUnit框架中,标记注解@Test的方法就可以被当成测试方法执行,而没有标记的就不当成测试方法执行。
三、自定义注解
自定义注解就是自己做一个注解来使用。
自定义注解的格式:
public @interface 注解名称{
public 属性类型 属性名() default 默认值 ;
}
四、元注解
元注解:就是注解注解的注解。
元注解有两个:
@Target:约束自定义注解只能在哪些地方使用。
@Retention:申明注解的生命周期。
@Target中可使用的值定义在ELementType枚举类中,常用值如下:
TYPE,类,接口
FLELD,成员变量
METHOD,成员方法
PARAMETER,方法参数
CONSTRUCTOR,构造器
LOCAL_VARIABLE,局部变量
@Retention中可使用的值定义在RetentionPolicy枚举类中,常用值如下:
SOURCE:注解只作用在源码阶段,生成的字节码文件中不存在
CLASS:注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值
RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段(开发常用)
五、注解解析
注解的解析:注解的操作中经常需要进行解析,注解的解析就是判断是否存在注解,存在的注解就解析出内容。
与注解解析相关的接口
Annotation:注解的顶级接口,注解都是Annotation类型的对象。
AnnotatedElement:该接口定义了与注解解析相关的解析方法。
方法 | 说明 |
Annotation[ ] getDeclaredAnnotations( ) | 获得当前对象上使用的所有注解,返回注解数组 |
T getDeclaredAnnotation(Class<T> annotetionClass ) | 根据注解类型获得对应注解对象 |
boolean isAnnotationPresent(Class<Annotation> annotationClass) | 判断当前对象是否使用了指定的注解,如果使用了则返回turn,否则false |
所有的类成分Class , Method , Field , Constructor 都实现了AnnotatedElement接口,他们都拥有注解解析的能力。
解析注解的技巧:
a、注解在哪个成分上,我们就先拿哪个成分对象。
b、比如注解作用在成员方法上,则要获得该成员方法对应的Method对象,再来拿上面的注解。
c、比如注解作用在类上,则要获得该类对应的Class对象,再来拿上面的注解。
d、比如注解作用在成员变量上,则要获得该成员变量对应的Field对象,再来拿上面的注解。