带有类型验证的Spring getBean

时间:2011-03-10 21:27:42

标签: spring generics casting

我使用的方法是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);

我不确定是否可以用这种方式定义类的类型。我在做梦还是有办法做到这一点?

感谢。

2 个答案:

答案 0 :(得分:3)

不是真的,但有一个运行时解决方法,至少不需要@SuppressWarnings。你可以让你的类抽象化,让Spring测试你的代码:

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

然后在XML配置中注入lookup method

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

它不是真正静态检查,但它在运行时失败 - 你保持丑陋的代码你的代码。

答案 1 :(得分:1)

也许这对你有用:

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