1、注解解析用到的API AnnotatedElement
AnnotatedElement : 是一个接口,定义了解析注解的方法 :::tips
- boolean isAnnotationPresent(Class
annotationClass)
参数 : 注解的字节码对象
作用 : 判断当前对象是否使用了指定的注解,如果使用了则返回true,否则false
2. T getAnnotation(ClassannotationClass)
参数 : 注解的字节码对象
返回值 : 根据注解类型获得对应注解对象 , 有了注解对象就可以调用属性(抽象方法),获取属性值 ::: Class,Constructor,Method,Field都会实现AnnotatedElement 接口 :::tips
- 解析类上的注解:借助字节码对象(Class对象)
- 解析构造方法上的注解 :借助构造器对象(Constructor对象)
- 解析方法上的注解 :借助方法对象(Method对象)
解析字段上的注解 :借助字段对象(Field对象) ::: 注解解析案例/*
1. 定义注解Book,要求如下:
- 包含属性:String value() 书名
- 包含属性:double price() 价格,默认值为 100
- 包含属性:String[] authors() 多位作者
- 限制注解使用的位置 :类和成员方法上 【Target】
- 指定注解的有效范围 :RUNTIME 【Retention】定义BookStore类,在类和成员方法上使用Book注解
给成员注入四大名著信息 :
西游记 —- 施耐庵
水浒传 —- 吴承恩
三国演义 —- 罗贯中
红楼梦 —- 曹雪芹 , 高鹗
3. 定义Test测试类获取Book注解上的数据思路 :
1. 类型上的注解,使用Class对象解析
2. 方法上的注解,使用Method对象解析API :
1. boolean isAnnotationPresent(ClassannotationClass)
参数 : 注解的字节码对象
作用 : 判断当前对象是否使用了指定的注解,如果使用了则返回true,否则false
2. T getAnnotation(ClassannotationClass)
参数 : 注解的字节码对象
返回值 : 根据注解类型获得对应注解对象 , 有了注解对象就可以调用属性(抽象方法),获取属性值
*/
class Test {
public static void main(String[] args) throws NoSuchMethodException {
ClassbookStoreClass = BookStore.class;
// method(bookStoreClass);Method buyMethod = bookStoreClass.getMethod(“buy”);
boolean annotationPresent = buyMethod.isAnnotationPresent(Book.class);
if(annotationPresent){
// 说明方法buy方法上存在Book注解
Book annotation = buyMethod.getAnnotation(Book.class);
String value = annotation.value();
double price = annotation.price();
String[] authors = annotation.authors();
System.out.println(value);
System.out.println(price);
System.out.println(Arrays.toString(authors));
}
}private static void method(Class
bookStoreClass) {
/
boolean isAnnotationPresent(ClassannotationClass) /
参数 : 注解的字节码对象
作用 : 判断当前对象是否使用了指定的注解,如果使用了则返回true,否则false
boolean annotationPresent = bookStoreClass.isAnnotationPresent(Book.class);if (annotationPresent) {
/
T getAnnotation(ClassannotationClass) /
参数 : 注解的字节码对象
返回值 : 根据注解类型获得对应注解对象 , 有了注解对象就可以调用属性(抽象方法),获取属性值
// 获取书的注解对象
Book annotation = bookStoreClass.getAnnotation(Book.class);
String value = annotation.value();
double price = annotation.price();
String[] authors = annotation.authors();System.out.println(value);<br /> System.out.println(price);<br /> System.out.println(Arrays.toString(authors));<br /> }<br /> }<br />}