Spring getBean with type validation
I'm using the method ApplicationContext.getBean(String name, Class requiredType). The bean is of type util:set. My code looks like:
Set<String> mySet = context.getBean("myBean", Set.class);
I want to know is how to do something like this to avoid the type casting warning:
Set<String> mySet = context.getBean("myBean", Set<String>.class);
I'm not sure if it's possible to define the type of a class in this way. Am I dreaming or is 开发者_开发问答there a way to do this?
Thanks.
Not really but there is a runtime workaround that at least removes the need for an @SuppressWarnings. You can make your class abstract and let Spring instrument your code:
public abstract class Test {
Set<String> getMyBean();
}
and then inject a lookup method in your XML config:
<bean class="Test">
<lookup-method name="myBean" bean="myBean" />
</bean>
It's not really statically checked but it fails-fast at runtime and you keep the ugly casting out of your code.
maybe this can be usefull to you:
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
精彩评论