2011-03-10 66 views
10

我使用ApplicationContext.getBean(String name,Class requiredType)方法。该bean是util:set类型的。我的代码如下所示:类型验证的Spring getBean

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

我想知道的是如何做这样的事情,以避免类型转换警告:

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

我不知道,如果是可以定义的类型以这种方式上课。我在做梦还是有办法做到这一点?

谢谢。

回答

3

不是真的,但有一个运行时变通办法,至少可以消除对@SuppressWarnings的需求。你可以让你的抽象类,让春天的仪器代码:

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

,然后在你的XML配置注入lookup method

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

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

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