Spring getBean с проверкой типа

Я использую метод ApplicationContext.getBean(имя строки, класс requiredType). bean имеет тип util: set. Мой код выглядит так:

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

Я хочу знать, как сделать что-то подобное, чтобы избежать предупреждения о литье типов:

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

Я не уверен, можно ли таким образом определить тип класса. Я мечтаю или есть способ сделать это?

Спасибо.

Ответ 1

Не совсем, но есть временное решение, которое по крайней мере устраняет необходимость в @SuppressWarnings. Вы можете сделать свой класс абстрактным и позволить Spring использовать код:

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

а затем введите метод поиска в конфигурацию XML:

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

Он не проверяется статически, но он не работает - быстро во время выполнения, и вы сохраняете уродливое отбрасывание кода.

Ответ 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