All Downloads are FREE. Search and download functionalities are using the official Maven repository.

spring.turbo.core.AnnotationHelper Maven / Gradle / Ivy

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); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy