Class ResolvedAnnotationMapping

java.lang.Object
org.miaixz.bus.core.lang.annotation.resolve.ResolvedAnnotationMapping
All Implemented Interfaces:
Annotation, AnnotationMapping<Annotation>

public class ResolvedAnnotationMapping extends Object implements AnnotationMapping<Annotation>
注解映射,用于包装并增强一个普通注解对象, 包装后的可以通过getResolvedXXX获得注解对象或属性值, 可以支持属性别名与属性覆写的属性解析机制

父子注解

当实例创建时,可通过source指定当前注解的子注解,多个实例通过该引用, 可以构成一条表示父子/元注解关系的单向链表。 当sourcenull时,认为当前注解即为根注解。

属性别名

注解内的属性可以通过Alias互相关联,当解析时, 对绑定中的任意一个属性的赋值,会被同步给其他直接或者间接关联的属性。 eg: 若注解存在a <=> b <=> c的属性别名关系,则对a赋值,此时bc也会被一并赋值。

属性覆写

当实例中source不为null,即当前注解存在至少一个或者多个子注解时, 若在子注解中的同名、同类型的属性,则获取值时将优先获取子注解的值,若该属性存在别名,则别名属性也如此。 属性覆写遵循如下机制:

  • 当覆写的属性存在别名属性时,别名属性也会一并被覆写; eg: 若注解存在a <=> b <=> c的属性别名关系,则覆写a,,属性bc也会被覆写;
  • 当属性可被多个子注解覆写时,总是优先选择离根注解最近的子注解覆写该属性; eg:若从根注解a到元注解b有依赖关系a => b => c, 此时若c中存在属性可同时被ab覆写,则优先选择a
  • 当覆写属性的子注解属性也被其子注解覆写时,等同于该子注解的子注解直接覆写的当前注解的属性; eg:若从根注解a到元注解b有依赖关系a => b => c, 此时若b中存在属性被a覆写,而b中被a覆写的属性又覆写c中属性, 则等同于c中被覆写的属性直接被a覆写。
Since:
Java 17+
Author:
Kimi Liu
See Also: