Tengo un problema con el mapa de Spring que me hace llorar.util: mapa en Spring recogiendo cada bean del tipo de mapa
Mi primavera se ve así:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
">
<util:map id="mockMap">
<entry key="userTest1" value="test1"/>
<entry key="userTest2" value="test2"/>
<entry key="userTest3" value="test6"/>
</util:map>
</beans>
continuación, el código donde estoy Autowiring esto es la siguiente (partes irrelevantes omitidos):
@Autowired
@Resource(name="mockMap")
Map<String, String> testMap;
@Test
public void testGetGearListActivityOK() {
for (String key : testMap.keySet()) {
System.out.println("key = " + key);
}
}
Sorprendentemente, esto va a darme una error en el paso de autoencendido que indica que no hay ningún tipo de combinación de frijoles String. Sin embargo, si cambio el mapa en la unidad de prueba que se define como Mapa entonces consigo la salida de la siguiente manera:
[junit] key = mockMap [junit] key = org.springframework.context.annotation.internalConfigurationAnnotationProcessor [junit] key = org.springframework.context.annotation.internalAutowiredAnnotationProcessor [junit] key = org.springframework.context.annotation.internalRequiredAnnotationProcessor [junit] key = org.springframework.context.annotation.internalCommonAnnotationProcessor [junit] key = systemProperties [junit] key = systemEnvironment [junit] key = messageSource [junit] key = applicationEventMulticaster [junit] key = lifecycleProcessor
todavía no he sido capaz de obtener la sección clave de la entrada a en realidad aparece como una clave. Si cambio el mapa de nuevo a Map y agrego algo en mi spring, el mapa se llena con esos, usando sus id como claves.
Estoy tan confundido aquí y he usado la primavera una cantidad decente en el pasado. Si alguien tiene una idea de lo que está pasando aquí, estaría muy agradecido.
Gracias de antemano.
Además, vi esta pregunta: Auto-wiring a List using util schema gives NoSuchBeanDefinitionException
Pero la solución no es utilizar @Resource, que yo ya estoy haciendo ..
El Autowired está anulando el recurso y por lo tanto Spring está buscando el primer objeto Map que tiene, que pasa a ser el contexto de primavera. Es por eso que obtienes la clave que mencionaste como salida. – dennisjtaylor
En realidad, lo que sucede es que si usa @Autowired en cualquier colección, buscará cualquier bean que coincida con su calificador (o todos los beans de ese tipo si no tiene un calificador) y los agregará a la colección. Si no tiene ningún tipo de frijoles de ese tipo, obtendrá una excepción de "no se encontró ningún frijol, al menos uno esperado" durante el autoenvío de ese objeto. – Craig
hoy pasé 3 horas en esto :( – Nayn