Package org.miaixz.bus.core.lang.annotation.resolve.elements
package org.miaixz.bus.core.lang.annotation.resolve.elements
AnnotatedElement 对象实现
- Since:
- Java 17+
- Author:
- Kimi Liu
-
ClassesClassDescription组合注解 对JDK的原生注解机制做一个增强,支持类似Spring的组合注解。 核心实现使用了递归获取指定元素上的注解以及注解的注解,以实现复合注解的获取。表示一组处于在层级结构中具有关联关系的
AnnotatedElement,创建实例时, 将扫描指定AnnotatedElement的层级结构中的所有AnnotatedElement, 并将其包装为MetaAnnotatedElement。 eg: 若存在元素A有对应父类与父接口B,C, 则根据A生成的HierarchicalAnnotatedElements实例将同时包含A,B,C, 该实例同时支持对这三个实例上直接声明的注解,以及这些注解的元注解进行访问。注解元素映射,用于包装一个AnnotatedElement,然后将被包装的元素上, 直接声明的注解以及这些注解的元组全部解析为ResolvedAnnotationMapping。 从而用于支持对元注解的访问操作。支持可重复注解的增强AnnotatedElement, 功能与MetaAnnotatedElement类似,但是存在下述差异: 限制以同一根注解延伸出的树结构上——而不是AnnotatedElement上——每种类型注解只能保留一个, 即当AnnotatedElement存在多个根注解有相同的元注解时,这些元注解会都会被扫描到; 支持扫描AnnotatedElement可重复注解,即当当前实例指定的RepeatableAnnotationCollector支持从AnnotatedElement上直接声明的注解中获得可重复注解时, 则将会自动将其展开直到不为容器注解为止。 eg: A上存在注解X,该注解是一个容器注解,内部可重复注解Y, 包含解析后,得到注解X与可重复注解Y, 同理,若存在X、Y、X的嵌套关系,则解析后获得全部三者; 由于上述机制,当通过实例的RepeatableMetaAnnotatedElement.getAnnotation(Class)或RepeatableMetaAnnotatedElement.getDeclaredAnnotation(Class)方法获得指定类型注解时,若该类型注解存在多个,仅能尽可能获得最先被扫描到的那一个。