복붙노트

[SPRING] 타입 검증을 가진 Spring getBean

SPRING

타입 검증을 가진 Spring getBean

ApplicationContext.getBean (String name, Class requiredType) 메서드를 사용하고 있습니다. bean의 유형은 util : set입니다. 내 코드는 다음과 같습니다.

Set<String> mySet = context.getBean("myBean", Set.class);

나는 타입 캐스팅 경고를 피하기 위해 이렇게하는 방법을 알고 싶다 :

Set<String> mySet = context.getBean("myBean", Set<String>.class);

이런 식으로 클래스의 유형을 정의 할 수 있는지 확실하지 않습니다. 나는 꿈꿔 왔을 까 아니면 이것을 할 수있는 방법이 있나?

감사.

해결법

  1. ==============================

    1.실제로는 아니지만 최소한 @SuppressWarnings의 필요성을 제거하는 런타임 해결 방법이 있습니다. 클래스를 추상화하고 Spring에서 코드를 사용하도록 할 수 있습니다.

    실제로는 아니지만 최소한 @SuppressWarnings의 필요성을 제거하는 런타임 해결 방법이 있습니다. 클래스를 추상화하고 Spring에서 코드를 사용하도록 할 수 있습니다.

    public abstract class Test {
      Set<String> getMyBean();
    }
    

    그런 다음 XML 설정에 조회 방법을 삽입하십시오.

    <bean class="Test">
      <lookup-method name="myBean" bean="myBean" />
    </bean>
    

    실제로 정적으로 검사되는 것은 아니지만 런타임에는 오류가 빠르며 코드에서 못생긴 캐스팅을 유지합니다.

  2. ==============================

    2.아마 이것은 당신에게 유용 할 수 있습니다 :

    아마 이것은 당신에게 유용 할 수 있습니다 :

    Set<String> setBean= null;
    Map<String, Set> beans = applicationContext.getBeansOfType(Set.class);
    for (Map.Entry<String, Set> bean: beans.entrySet()) {
        ParameterizedType thisType = (ParameterizedType) bean.getClass().getGenericSuperclass();
        Class<?> parametrizedClass= thisType.getActualTypeArguments()[0];
        if (parametrizedClass.isAssignableFrom(String)) {
            setBean= (Set<String>) bean;
        }
    }
    

    http://javahelp.redsaltillo.net

  3. from https://stackoverflow.com/questions/5266127/spring-getbean-with-type-validation by cc-by-sa and MIT license