2011-03-10 11 views
10

Estoy usando el método ApplicationContext.getBean (String name, Class requiredType). El bean es de tipo util: set. Mi código es el siguiente:Spring getBean con validación de tipo

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

que quiero saber es cómo hacer algo como esto para evitar el aviso de la conversión de tipos:

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

No estoy seguro si es posible definir el tipo de una clase de esta manera. ¿Estoy soñando o hay una manera de hacer esto?

Gracias.

Respuesta

3

No realmente, pero hay una solución de tiempo de ejecución que al menos elimina la necesidad de un @SuppressWarnings. Usted puede hacer su clase abstracta y dejar instrumento primavera su código:

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

y luego inyectar un lookup method en su configuración XML:

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

No es realmente estáticamente comprobado pero fracasa-rápida en tiempo de ejecución y mantiene el feo rechazo de su código.

1

tal vez esto puede ser útil para usted:

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

Cuestiones relacionadas