Class HierarchicalAnnotatedElements

java.lang.Object
org.miaixz.bus.core.annotation.resolve.elements.HierarchicalAnnotatedElements
All Implemented Interfaces:
Iterable<AnnotatedElement>, AnnotatedElement

public class HierarchicalAnnotatedElements extends Object implements AnnotatedElement, Iterable<AnnotatedElement>

表示一组处于在层级结构中具有关联关系的AnnotatedElement,创建实例时, 将扫描指定AnnotatedElement的层级结构中的所有AnnotatedElement, 并将其包装为MetaAnnotatedElement。 eg: 若存在元素A有对应父类与父接口BC, 则根据A生成的HierarchicalAnnotatedElements实例将同时包含ABC, 该实例同时支持对这三个实例上直接声明的注解,以及这些注解的元注解进行访问。

注解搜索范围

在当前实例中,针对带有和不带declared关键字的方法定义如下:

  • 当方法带有declared关键字时,查找范围仅限被保存的所有AnnotatedElement上直接声明的注解;
  • 当方法不带declared关键字时,查找范围包括:
    1. 被保存的所有AnnotatedElement上直接声明的注解,及这些注解的元注解;
    2. 若是类,则包括其所有父类和所有父接口上声明的注解和元注解;
    3. 若是方法,且不是静态/私有/被final修饰的方法时, 则额外获取包括其声明类的所有父类和所有父接口中,与该方法具有相同方法签名的方法上的注解和元注解;

扫描顺序

AnnotatedElement具有层级结构式,会按照广度优先扫描其本身(元素是Class)、 或其声明类(元素是Method)的层级结构。 在该过程中,总是先扫描父类,再扫描父接口, 若存在多个父接口,则其扫描顺序遵循从Class.getInterfaces()获得该接口的顺序。

Since:
Java 17+
Author:
Kimi Liu