> Java > java지도 시간 > Spring에서 일반 정보를 얻기 위한 팁

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

不言
풀어 주다: 2019-03-27 10:24:32
앞으로
2750명이 탐색했습니다.

이 글의 내용은 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿