Package org.miaixz.bus.core.lang.annotation.resolve


package org.miaixz.bus.core.lang.annotation.resolve
注解包,提供增强型注解和注解工具类,处理包括:
  • 注解元素(AnnotatedElements)上的注解。
  • 父元素上的注解(包括类、接口、方法、属性)。
  • 注解上的注解。
  • 父元素上的注解上的注解。
Since:
Java 17+
Author:
Kimi Liu
  • Class
    Description
    AnnotatedElement工具类,提供对层级结构中AnnotatedElement上注解及元注解的访问支持, 并提供诸如基于Alias的属性别名、基于父子注解间的属性值覆盖等特殊的属性映射机制支持。 搜索层级结构 参考 Spring 中AnnotatedElementUtils, 工具类提供get以及find两种语义的搜索: get:表示搜索范围仅限于指定的AnnotatedElement本身; find:表示搜索范围除了指定的AnnotatedElement本身外, 若AnnotatedElement是类,则还会搜索其所有关联的父类和父接口; 若AnnotatedElement是方法,则还会搜索其声明类关联的所有父类和父接口中,与该方法具有相同方法签名的方法对象; eg: 若类A分别有父类和父接口BC, 则通过getXXX方法将只能获得A上的注解, 而通过findXXX方法将能获得ABC上的注解。 搜索元注解 工具类支持搜索注解的元注解。在所有格式为getXXXfindXXX的静态方法中, 若不带有directly关键字,则该方法支持搜索元注解,否则不支持搜索元注解。 eg: 若类A分别有父类和父接口BC,上面分别有注解X与其元注解Y, 则此时基于A有: getDirectlyXXX:能够获得A上的注解XgetXXX:能够获得A上的注解X及元注解YfindDirectlyXXX:能够分别获得ABC上的注解XfindXXX:能够分别获得ABC上的注解X及元注解Y; 注意:在当前实例中将无视Inherited的效果,即通过directly方法将无法获得父类上带有Inherited的注解。 注解属性映射 工具类支持注解对象属性上的一些属性映射机制,即当注解被扫描时, 将根据一些属性映射机制“解析”为其他类型的属性,这里支持的机制包括: 基于Alias的属性别名:若注解属性通过Alias互相关联,则对其中任意属性赋值,则等同于对所有关联属性赋值; eg:
    用于增强注解的包装器
    代理注解处理器,用于为AnnotationMapping生成代理对象,当从该代理对象上获取属性值时, 总是通过AnnotationMapping.getResolvedAttributeValue(String, Class)获取。
    表明注解是一个合成的注解
    注解代理 通过代理指定注解,可以自定义调用注解的方法逻辑,如支持Alias 注解
    AnnotationMapping的基本实现,仅仅是简单包装了注解对象
    可重复注解收集器,用于从一个注解获得被它包含的可重复注解
    RepeatableAnnotationCollector的基本实现
    自定义判断条件的实现,当解析注解属性时,将根据给定的判断条件, 确定该属性中是否含有可重复注解,收集器将返回所有匹配的属性中的可重复注解。
    全量实现,当注解中存在有属性为注解数组,且该数组对应的注解类型被Repeatable注解时, 认为该属性包含可重复注解。 收集器将返回所有符合上述条件的属性中的可重复注解。
    空实现
    标准实现,当注解中有且仅有一个名为value的属性时, 若该属性类型为注解数组,且该数组对应的注解类型被Repeatable注解, 则收集器将返回该属性中包括的可重复注解。
    注解映射,用于包装并增强一个普通注解对象, 包装后的可以通过getResolvedXXX获得注解对象或属性值, 可以支持属性别名与属性覆写的属性解析机制