public class AnnotationUtil extends Object
Constructor and Description |
---|
AnnotationUtil() |
Modifier and Type | Method and Description |
---|---|
static SynthesizedAggregateAnnotation |
aggregatingFromAnnotation(Annotation... annotations)
对指定注解对象进行聚合
|
static SynthesizedAggregateAnnotation |
aggregatingFromAnnotationWithMeta(Annotation... annotations)
对指定注解对象及其元注解进行聚合
|
static <T extends Annotation> |
getAllSynthesizedAnnotations(AnnotatedElement annotatedEle,
Class<T> annotationType)
获取元素上所有指定注解
若元素是类,则递归解析全部父类和全部父接口上的注解;
若元素是方法、属性或注解,则只解析其直接声明的注解;
注解合成规则如下:
若
AnnotatedEle 按顺序从上到下声明了A,B,C三个注解,且三注解存在元注解如下:
A -> M1 -> M2
B -> M3 -> M1 -> M2
C -> M2
此时入参annotationType 类型为M1 ,则最终将返回基于根注解A与根注解B合成的合成注解。 |
static <A extends Annotation> |
getAnnotation(AnnotatedElement annotationEle,
Class<A> annotationType)
获取指定注解
|
static <T extends Annotation> |
getAnnotationAlias(AnnotatedElement annotationEle,
Class<T> annotationType)
获取别名支持后的注解
|
static Annotation[] |
getAnnotations(AnnotatedElement annotationEle,
boolean isToCombination)
获取指定注解
|
static <T> T[] |
getAnnotations(AnnotatedElement annotationEle,
boolean isToCombination,
Class<T> annotationType)
获取指定注解
|
static Annotation[] |
getAnnotations(AnnotatedElement annotationEle,
boolean isToCombination,
Predicate<Annotation> predicate)
获取指定注解
|
static <T> T |
getAnnotationValue(AnnotatedElement annotationEle,
Class<? extends Annotation> annotationType)
获取指定注解默认值
如果无指定的属性方法返回null |
static <T> T |
getAnnotationValue(AnnotatedElement annotationEle,
Class<? extends Annotation> annotationType,
String propertyName)
获取指定注解属性的值
如果无指定的属性方法返回null |
static <A extends Annotation,R> |
getAnnotationValue(AnnotatedElement annotationEle,
Func1<A,R> propertyName)
获取指定注解属性的值
如果无指定的属性方法返回null |
static Map<String,Object> |
getAnnotationValueMap(AnnotatedElement annotationEle,
Class<? extends Annotation> annotationType)
获取指定注解中所有属性值
如果无指定的属性方法返回null |
static <T> T[] |
getCombinationAnnotations(AnnotatedElement annotationEle,
Class<T> annotationType)
获取组合注解
|
static RetentionPolicy |
getRetentionPolicy(Class<? extends Annotation> annotationType)
获取注解类的保留时间,可选值 SOURCE(源码时),CLASS(编译时),RUNTIME(运行时),默认为 CLASS
|
static <T extends Annotation> |
getSynthesizedAnnotation(AnnotatedElement annotatedEle,
Class<T> annotationType)
获取元素上距离指定元素最接近的合成注解
若元素是类,则递归解析全部父类和全部父接口上的注解;
若元素是方法、属性或注解,则只解析其直接声明的注解;
注解合成规则如下:
若
AnnotatedEle 按顺序从上到下声明了A,B,C三个注解,且三注解存在元注解如下:
A -> M3
B -> M1 -> M2 -> M3
C -> M2 -> M3
此时入参annotationType 类型为M2 ,则最终将优先返回基于根注解B合成的合成注解 |
static <T extends Annotation> |
getSynthesizedAnnotation(Class<T> annotationType,
Annotation... annotations)
将指定注解实例与其元注解转为合成注解
|
static ElementType[] |
getTargetType(Class<? extends Annotation> annotationType)
获取注解类可以用来修饰哪些程序元素,如 TYPE, METHOD, CONSTRUCTOR, FIELD, PARAMETER 等
|
static boolean |
hasAnnotation(AnnotatedElement annotationEle,
Class<? extends Annotation> annotationType)
检查是否包含指定注解指定注解
|
static boolean |
isDocumented(Class<? extends Annotation> annotationType)
是否会保存到 Javadoc 文档中
|
static boolean |
isInherited(Class<? extends Annotation> annotationType)
是否可以被继承,默认为 false
|
static boolean |
isJdkMetaAnnotation(Class<? extends Annotation> annotationType)
是否为Jdk自带的元注解。
|
static boolean |
isNotJdkMateAnnotation(Class<? extends Annotation> annotationType)
是否不为Jdk自带的元注解。
|
static boolean |
isSynthesizedAnnotation(Annotation annotation)
该注解对象是否为通过代理类生成的合成注解
|
static List<Annotation> |
scanClass(Class<?> targetClass)
|
static List<Annotation> |
scanMetaAnnotation(Class<? extends Annotation> annotationType)
扫描注解类,以及注解类的
Class 层级结构中的注解,将返回除了META_ANNOTATIONS 中指定的JDK默认注解外,
按元注解对象与annotationType 的距离和Class.getAnnotations() 顺序排序的注解对象集合
比如:若 annotationType 为 A,且A存在元注解B,B又存在元注解C和D,则有:
|-> C.class [@a, @b]
A.class -> B.class [@a] -|
|-> D.class [@a, @c]
扫描A,则该方法最终将返回 [@a, @a, @b, @a, @c] |
static List<Annotation> |
scanMethod(Method method)
扫描方法,以及该方法所在类的
Class 层级结构中的具有相同方法签名的方法,
将返回除了META_ANNOTATIONS 中指定的JDK默认元注解外,
全部匹配方法上AccessibleObject.getAnnotations() 方法返回的注解对象。 |
static void |
setValue(Annotation annotation,
String annotationField,
Object value)
设置新的注解的属性(字段)值
|
static CombinationAnnotationElement |
toCombination(AnnotatedElement annotationEle)
将指定的被注解的元素转换为组合注解元素
|
public static boolean isJdkMetaAnnotation(Class<? extends Annotation> annotationType)
annotationType
- 注解类型public static boolean isNotJdkMateAnnotation(Class<? extends Annotation> annotationType)
annotationType
- 注解类型public static CombinationAnnotationElement toCombination(AnnotatedElement annotationEle)
annotationEle
- 注解元素public static Annotation[] getAnnotations(AnnotatedElement annotationEle, boolean isToCombination)
annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionisToCombination
- 是否为转换为组合注解,组合注解可以递归获取注解的注解public static <T> T[] getCombinationAnnotations(AnnotatedElement annotationEle, Class<T> annotationType)
T
- 注解类型annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionannotationType
- 限定的public static <T> T[] getAnnotations(AnnotatedElement annotationEle, boolean isToCombination, Class<T> annotationType)
T
- 注解类型annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionisToCombination
- 是否为转换为组合注解,组合注解可以递归获取注解的注解annotationType
- 限定的public static Annotation[] getAnnotations(AnnotatedElement annotationEle, boolean isToCombination, Predicate<Annotation> predicate)
annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionisToCombination
- 是否为转换为组合注解,组合注解可以递归获取注解的注解predicate
- 过滤器,Predicate.test(Object)
返回true
保留,否则不保留AnnotatedElement
为null
,返回null
public static <A extends Annotation> A getAnnotation(AnnotatedElement annotationEle, Class<A> annotationType)
A
- 注解类型annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionannotationType
- 注解类型public static boolean hasAnnotation(AnnotatedElement annotationEle, Class<? extends Annotation> annotationType)
annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionannotationType
- 注解类型public static <T> T getAnnotationValue(AnnotatedElement annotationEle, Class<? extends Annotation> annotationType) throws UtilException
T
- 注解值类型annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionannotationType
- 注解类型UtilException
- 调用注解中的方法时执行异常public static <T> T getAnnotationValue(AnnotatedElement annotationEle, Class<? extends Annotation> annotationType, String propertyName) throws UtilException
T
- 注解值类型annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionannotationType
- 注解类型propertyName
- 属性名,例如注解中定义了name()方法,则 此处传入nameUtilException
- 调用注解中的方法时执行异常public static <A extends Annotation,R> R getAnnotationValue(AnnotatedElement annotationEle, Func1<A,R> propertyName)
A
- 注解类型R
- 注解类型值annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionpropertyName
- 属性名,例如注解中定义了name()方法,则 此处传入nameUtilException
- 调用注解中的方法时执行异常public static Map<String,Object> getAnnotationValueMap(AnnotatedElement annotationEle, Class<? extends Annotation> annotationType) throws UtilException
annotationEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionannotationType
- 注解类型UtilException
- 调用注解中的方法时执行异常public static RetentionPolicy getRetentionPolicy(Class<? extends Annotation> annotationType)
annotationType
- 注解类public static ElementType[] getTargetType(Class<? extends Annotation> annotationType)
annotationType
- 注解类public static boolean isDocumented(Class<? extends Annotation> annotationType)
annotationType
- 注解类public static boolean isInherited(Class<? extends Annotation> annotationType)
annotationType
- 注解类public static List<Annotation> scanMetaAnnotation(Class<? extends Annotation> annotationType)
Class
层级结构中的注解,将返回除了META_ANNOTATIONS
中指定的JDK默认注解外,
按元注解对象与annotationType
的距离和Class.getAnnotations()
顺序排序的注解对象集合
比如:
若annotationType
为 A,且A存在元注解B,B又存在元注解C和D,则有:
|-> C.class [@a, @b] A.class -> B.class [@a] -| |-> D.class [@a, @c]扫描A,则该方法最终将返回
[@a, @a, @b, @a, @c]
annotationType
- 注解类MetaAnnotationScanner
public static List<Annotation> scanClass(Class<?> targetClass)
扫描类以及类的Class
层级结构中的注解,将返回除了META_ANNOTATIONS
中指定的JDK默认元注解外,
全部类/接口的Class.getAnnotations()
方法返回的注解对象。
层级结构将按广度优先递归,遵循规则如下:
targetClass
更近的接口;Class
中被声明,则还会遵循Class.getAnnotations()
的顺序。
比如:
若targetClass
为A.class
,且A.class
存在父类B.class
、父接口C.class
,
三个类的注解声明情况如下:
|-> B.class [@a, @b] A.class [@a] -| |-> C.class [@a, @c]则该方法最终将返回
[@a, @a, @b, @a, @c]
targetClass
- 类TypeAnnotationScanner
public static List<Annotation> scanMethod(Method method)
扫描方法,以及该方法所在类的Class
层级结构中的具有相同方法签名的方法,
将返回除了META_ANNOTATIONS
中指定的JDK默认元注解外,
全部匹配方法上AccessibleObject.getAnnotations()
方法返回的注解对象。
方法所在类的层级结构将按广度优先递归,遵循规则如下:
targetClass
更近的接口;AccessibleObject.getAnnotations()
的顺序。
比如:
若方法X声明于A.class
,且重载/重写自父类B.class
,并且父类中的方法X由重写至其实现的接口C.class
,
三个类的注解声明情况如下:
A#X()[@a] -> B#X()[@b] -> C#X()[@c]则该方法最终将返回
[@a, @b, @c]
method
- 方法MethodAnnotationScanner
public static void setValue(Annotation annotation, String annotationField, Object value)
annotation
- 注解对象annotationField
- 注解属性(字段)名称value
- 要更新的属性值public static boolean isSynthesizedAnnotation(Annotation annotation)
annotation
- 注解对象SynthesizedAnnotationProxy.isProxyAnnotation(Class)
public static <T extends Annotation> T getAnnotationAlias(AnnotatedElement annotationEle, Class<T> annotationType)
T
- 注解类型annotationEle
- 被注解的类annotationType
- 注解类型Classpublic static <T extends Annotation> T getSynthesizedAnnotation(Class<T> annotationType, Annotation... annotations)
T
- 注解类型annotationType
- 注解类annotations
- 注解对象SynthesizedAggregateAnnotation
public static <T extends Annotation> T getSynthesizedAnnotation(AnnotatedElement annotatedEle, Class<T> annotationType)
获取元素上距离指定元素最接近的合成注解
注解合成规则如下:
若AnnotatedEle
按顺序从上到下声明了A,B,C三个注解,且三注解存在元注解如下:
A -> M3 B -> M1 -> M2 -> M3 C -> M2 -> M3此时入参
annotationType
类型为M2
,则最终将优先返回基于根注解B合成的合成注解T
- 注解类型annotatedEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionannotationType
- 注解类SynthesizedAggregateAnnotation
public static <T extends Annotation> List<T> getAllSynthesizedAnnotations(AnnotatedElement annotatedEle, Class<T> annotationType)
注解合成规则如下:
若AnnotatedEle
按顺序从上到下声明了A,B,C三个注解,且三注解存在元注解如下:
A -> M1 -> M2 B -> M3 -> M1 -> M2 C -> M2此时入参
annotationType
类型为M1
,则最终将返回基于根注解A与根注解B合成的合成注解。T
- 注解类型annotatedEle
- AnnotatedElement
,可以是Class、Method、Field、Constructor、ReflectPermissionannotationType
- 注解类SynthesizedAggregateAnnotation
public static SynthesizedAggregateAnnotation aggregatingFromAnnotation(Annotation... annotations)
annotations
- 注解对象public static SynthesizedAggregateAnnotation aggregatingFromAnnotationWithMeta(Annotation... annotations)
annotations
- 注解对象Copyright © 2024. All rights reserved.