spring.turbo.core.AnnotationHelper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spring-turbo Show documentation
Show all versions of spring-turbo Show documentation
Another enhancement library of SpringBoot/SpringFramework. Have fun.
The newest version!
package spring.turbo.core;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.lang.Nullable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Objects;
/**
* 元注释相关工具
*
* @author 应卓
* @see AnnotationUtils
* @see AnnotationAttributes
* @since 2.0.11
*/
public final class AnnotationHelper {
/**
* 私有构造方法
*/
private AnnotationHelper() {
}
/**
* 查找元注释
*
* @param type 类型
* @param annotationType 元注释class
* @param 元注释类型泛型
* @return 元注释实例,没有查找到时返回 {@code null}
*/
@Nullable
public static A findAnnotation(Class> type, Class annotationType) {
return AnnotationUtils.findAnnotation(type, annotationType);
}
/**
* 查找元注释,并断言能够找到该元注释
*
* @param type 类型
* @param annotationType 要查找的元注释类型
* @param 元注释类型泛型
* @return 元注释实例
*/
public static A findRequiredAnnotation(Class> type, Class annotationType) {
var annotation = findAnnotation(type, annotationType);
return Objects.requireNonNull(annotation);
}
/**
* 查找元注释,并转换成 {@link AnnotationAttributes}实例
* 如果找不到该元注释,则返回一个空 AnnotationAttributes。 而不会返回 {@code null}
*
* @param type 类型
* @param annotationType 要查找的元注释类型
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes findAnnotationAttributes(
Class> type,
Class annotationType) {
return findAnnotationAttributes(type, annotationType, false, false);
}
/**
* 查找元注释,并转换成 {@link AnnotationAttributes}实例
* 如果找不到该元注释,则返回一个空 AnnotationAttributes。 而不会返回 {@code null}
*
* @param type 类型
* @param annotationType 要查找的元注释类型
* @param classValueAsString 是否把元注释中的类型要素用字符串的形式表达
* @param nestedAnnotationsAsMap 是否把元注释中的元素要素用字符串的形式表达
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes findAnnotationAttributes(
Class> type,
Class annotationType,
boolean classValueAsString,
boolean nestedAnnotationsAsMap) {
var annotation = findAnnotation(type, annotationType);
if (annotation == null) {
return new AnnotationAttributes();
}
return AnnotationAttributes.fromMap(
AnnotationUtils.getAnnotationAttributes(annotation, classValueAsString, nestedAnnotationsAsMap));
}
/**
* 查找元注释
*
* @param method 方法
* @param annotationType 元注释class
* @param 元注释类型泛型
* @return 元注释实例,没有查找到时返回 {@code null}
*/
@Nullable
public static A findAnnotation(Method method, Class annotationType) {
return AnnotationUtils.findAnnotation(method, annotationType);
}
/**
* 查找元注释,并断言能够找到该元注释
*
* @param method 方法
* @param annotationType 要查找的元注释类型
* @param 元注释类型泛型
* @return 元注释实例
*/
public static A findRequiredAnnotation(Method method, Class annotationType) {
var annotation = AnnotationUtils.findAnnotation(method, annotationType);
return Objects.requireNonNull(annotation);
}
/**
* 查找元注释,并转换成 {@link AnnotationAttributes}实例
* 如果找不到该元注释,则返回一个空 AnnotationAttributes。 而不会返回 {@code null}
*
* @param method 方法
* @param annotationType 要查找的元注释类型
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes findAnnotationAttributes(
Method method,
Class annotationType) {
return findAnnotationAttributes(method, annotationType, false, false);
}
/**
* 查找元注释,并转换成 {@link AnnotationAttributes}实例
* 如果找不到该元注释,则返回一个空 AnnotationAttributes。 而不会返回 {@code null}
*
* @param method 方法
* @param annotationType 要查找的元注释类型
* @param classValueAsString 是否把元注释中的类型要素用字符串的形式表达
* @param nestedAnnotationsAsMap 是否把元注释中的元素要素用字符串的形式表达
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes findAnnotationAttributes(
Method method,
Class annotationType, boolean classValueAsString, boolean nestedAnnotationsAsMap) {
var annotation = findAnnotation(method, annotationType);
if (annotation == null) {
return new AnnotationAttributes();
}
return AnnotationAttributes.fromMap(
AnnotationUtils.getAnnotationAttributes(annotation, classValueAsString, nestedAnnotationsAsMap));
}
/**
* 查找元注释
*
* @param field 字段
* @param annotationType 元注释class
* @param 元注释类型泛型
* @return 元注释实例,没有查找到时返回 {@code null}
*/
@Nullable
public static A findAnnotation(Field field, Class annotationType) {
return AnnotationUtils.findAnnotation(field, annotationType);
}
/**
* 查找元注释,并断言能够找到该元注释
*
* @param field 字段
* @param annotationType 要查找的元注释类型
* @param 元注释类型泛型
* @return 元注释实例
*/
public static A findRequiredAnnotation(Field field, Class annotationType) {
var annotation = AnnotationUtils.findAnnotation(field, annotationType);
return Objects.requireNonNull(annotation);
}
/**
* 查找元注释,并转换成 {@link AnnotationAttributes}实例
* 如果找不到该元注释,则返回一个空 AnnotationAttributes。 而不会返回 {@code null}
*
* @param field 字段
* @param annotationType 要查找的元注释类型
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes findAnnotationAttributes(
Field field,
Class annotationType) {
return findAnnotationAttributes(field, annotationType, false, false);
}
/**
* 查找元注释,并转换成 {@link AnnotationAttributes}实例
* 如果找不到该元注释,则返回一个空 AnnotationAttributes。 而不会返回 {@code null}
*
* @param field 字段
* @param annotationType 要查找的元注释类型
* @param classValueAsString 是否把元注释中的类型要素用字符串的形式表达
* @param nestedAnnotationsAsMap 是否把元注释中的元素要素用字符串的形式表达
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes findAnnotationAttributes(Field field,
Class annotationType, boolean classValueAsString, boolean nestedAnnotationsAsMap) {
var annotation = findAnnotation(field, annotationType);
if (annotation == null) {
return new AnnotationAttributes();
}
return AnnotationAttributes.fromMap(
AnnotationUtils.getAnnotationAttributes(annotation, classValueAsString, nestedAnnotationsAsMap));
}
/**
* 查找元注释
*
* @param constructor 构造方法z
* @param annotationType 元注释class
* @param 元注释类型泛型
* @return 元注释实例,没有查找到时返回 {@code null}
*/
@Nullable
public static A findAnnotation(Constructor> constructor, Class annotationType) {
return AnnotationUtils.findAnnotation(constructor, annotationType);
}
/**
* 查找元注释,并断言能够找到该元注释
*
* @param constructor 构造方法
* @param annotationType 要查找的元注释类型
* @param 元注释类型泛型
* @return 元注释实例
*/
public static A findRequiredAnnotation(Constructor> constructor, Class annotationType) {
var annotation = findAnnotation(constructor, annotationType);
return Objects.requireNonNull(annotation);
}
/**
* 查找元注释,并转换成 {@link AnnotationAttributes}实例
* 如果找不到该元注释,则返回一个空 AnnotationAttributes。 而不会返回 {@code null}
*
* @param constructor 构造方法
* @param annotationType 要查找的元注释类型
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes findAnnotationAttributes(
Constructor> constructor,
Class annotationType) {
return findAnnotationAttributes(constructor, annotationType, false, false);
}
/**
* 查找元注释,并转换成 {@link AnnotationAttributes}实例
* 如果找不到该元注释,则返回一个空 AnnotationAttributes。 而不会返回 {@code null}
*
* @param constructor 构造方法
* @param annotationType 要查找的元注释类型
* @param classValueAsString 是否把元注释中的类型要素用字符串的形式表达
* @param nestedAnnotationsAsMap 是否把元注释中的元素要素用字符串的形式表达
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes findAnnotationAttributes(
Constructor> constructor,
Class annotationType,
boolean classValueAsString,
boolean nestedAnnotationsAsMap) {
var annotation = findAnnotation(constructor, annotationType);
if (annotation == null) {
return new AnnotationAttributes();
}
return AnnotationAttributes.fromMap(
AnnotationUtils.getAnnotationAttributes(annotation, classValueAsString, nestedAnnotationsAsMap));
}
/**
* 把元注释并转换成 {@link AnnotationAttributes}实例
*
* @param annotation 元注释实例
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes toAnnotationAttributes(@Nullable A annotation) {
return toAnnotationAttributes(annotation, false, false);
}
/**
* 把元注释并转换成 {@link AnnotationAttributes}实例
*
* @param annotation 元注释实例
* @param classValueAsString 是否把元注释中的类型要素用字符串的形式表达
* @param nestedAnnotationsAsMap 是否把元注释中的元素要素用字符串的形式表达
* @param 元注释类型泛型
* @return {@link AnnotationAttributes} 实例
*/
public static AnnotationAttributes toAnnotationAttributes(
@Nullable A annotation,
boolean classValueAsString,
boolean nestedAnnotationsAsMap) {
if (annotation == null) {
return new AnnotationAttributes();
}
return AnnotationUtils.getAnnotationAttributes(annotation, classValueAsString, nestedAnnotationsAsMap);
}
}