1、前言
- 我们会使用注解注释一个类的成分,那么就涉及到要解析出这些注解的数据。
- 开发中经常要知道一个类的成分上面到底有哪些注解,注解有哪些属性,这都需要进行注解的解析。
2、注解解析相关的接口
1、Annotation:注解类型,该类是所有注解的父类,注解都是一个Annotation对象。
2、AnnotatedElement:该接口定义了与注解解析相关的方法。所有的类成分Class、Method、Field、Constructor:都实现了AnnotatedElement接口,他们都拥有解析注解的能力。
Annotation[] getDeclaredAnnotations
获得当前对象上使用的所有注解,返回注解数组。T getDeclaredAnnotation(Class<T> annotationClass)
根据注解类型获得对应注解对象。boolean isAnnotationPresent(Class<T> annotationClass)
判断当前对象是否使用了指定的注解,如果使用了则返回true,否则,返回false。
3、解析注解数据的原理
- 注解在哪个成分上,我们就先拿哪个成分对象。
- 比如注解作用成员方法,就要获得该成员方法对应的Method对象,再来拿上面的注解。
- 比如注解作用在类上,则获取该类的Class对象,再来拿上面的注解。
- 比如注解作用在成员变量上,则要获得该成员变量对应的Field对象,再来拿上面的注解。
4、案例
1、定义注解Book,要求如下:
- 包含属性:String value() 书名
- 包含属性:double price() 价格
- 包含属性:String[] authors() 作者
- 限制注解使用的位置:类和成员方法上
- 限制注解的有效范围:RUNTIME
2、定义BookStore类,在类和成员方法run()上面使用Book注解
3、定义AnnotationTest测试类,获取Book注解上的数据
5、案例实现代码
package com.zjl.study.注解.注解的解析;
import org.junit.Test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import