>  기사  >  Java  >  Spring에서 일반 정보를 얻기 위한 팁

Spring에서 일반 정보를 얻기 위한 팁

不言
不言앞으로
2019-03-27 10:24:322712검색

이 글의 내용은 Spring에서 일반적인 정보를 얻는 기술과 방법에 관한 것입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

소개: Spring 소스 코드는 우리가 접할 수 있는 대부분의 도구를 소스 코드에서 찾을 수 있습니다. 따라서 저자의 오픈 소스 Mica는 기본적인 기능 향상을 위해 완전히 Spring을 기반으로 하며 바퀴를 재발명하지 않습니다. 오늘 제가 공유하고 싶은 것은 Spring에서 제네릭을 우아하게 얻는 방법입니다.

일반 가져오기

직접 구문 분석

이전 처리 방법인 코드 소스는 vjtools(Jiangnan Baiyi)입니다.

/**
 * 通过反射, 获得Class定义中声明的父类的泛型参数的类型.
 * 
 * 注意泛型必须定义在父类处. 这是唯一可以通过反射从泛型获得Class实例的地方.
 * 
 * 如无法找到, 返回Object.class.
 * 
 * 如public UserDao extends HibernateDao<User,Long>
 * 
 * @param clazz clazz The class to introspect
 * @param index the Index of the generic declaration, start from 0.
 * @return the index generic declaration, or Object.class if cannot be determined
 */
public static Class getClassGenericType(final Class clazz, final int index) {

    Type genType = clazz.getGenericSuperclass();

    if (!(genType instanceof ParameterizedType)) {
        logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
        return Object.class;
    }

    Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

    if ((index >= params.length) || (index < 0)) {
        logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "&#39;s Parameterized Type: "
                + params.length);
        return Object.class;
    }
    if (!(params[index] instanceof Class)) {
        logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
        return Object.class;
    }

    return (Class) params[index];
}

ResolvableType 도구

Spring 4.0부터 ResolvableType 도구가 Spring에 추가되었습니다. 이 클래스를 사용하면 일반 정보를 보다 편리하게 반환할 수 있습니다.
먼저 공식 예를 살펴보겠습니다.

private HashMap<Integer, List<String>> myMap;

public void example() {
    ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap"));
    t.getSuperType(); // AbstractMap<Integer, List<String>>
    t.asMap(); // Map<Integer, List<String>>
    t.getGeneric(0).resolve(); // Integer
    t.getGeneric(1).resolve(); // List
    t.getGeneric(1); // List<String>
    t.resolveGeneric(1, 0); // String
}

자세한 설명

Field의 일반 정보를 가져오는 구성

ResolvableType.forField(Field)

Method의 일반 정보를 가져오는 구성

ResolvableType.forMethodParameter(Method, int)

반환된 매개변수의 일반 정보를 가져오는 구성

ResolvableType.forMethodReturnType(Method)

Construction을 사용하여 구성 매개변수의 일반 정보를 가져옵니다

ResolvableType.forConstructorParameter(Constructor, int)

Construction이 클래스의 일반 정보를 가져옵니다

ResolvableType.forClass(Class)

Construction이 유형의 일반 정보를 가져옵니다

ResolvableType.forType(Type)

Construction이 인스턴스의 일반 정보를 가져옵니다

ResolvableType.forInstance(Object)

API에 대한 자세한 내용은 ResolvableType java 문서(https://docs.spring.io/spring...)를 참조하세요.

이 기사는 여기서 끝났습니다. 더 흥미로운 콘텐츠를 보려면 Java 비디오를 시청하세요. PHP 중국어 웹사이트의 Tutorial 칼럼입니다!

위 내용은 Spring에서 일반 정보를 얻기 위한 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제