Ho un problema con la mappa di primavera che mi sta facendo piangere.util: mappa in primavera che preleva ogni bean del tipo di mappa
la mia primavera si presenta così:
<?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>
Quindi il codice dove sono autowiring questo è la seguente (parti irrilevanti omessi):
@Autowired
@Resource(name="mockMap")
Map<String, String> testMap;
@Test
public void testGetGearListActivityOK() {
for (String key : testMap.keySet()) {
System.out.println("key = " + key);
}
}
Abbastanza sorprendentemente, questo sarà effettivamente darmi una errore nella fase di autowiring che dice che non ci sono bean che corrispondono al tipo String. Tuttavia, se cambio la mappa nell'unità-test per essere definito come Mappa allora ottengo l'uscita segue:
[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
io non sono ancora stati in grado di ottenere la sezione chiave della voce di in realtà si presentano come una chiave. Se cambio di nuovo la mappa in Mappa e ne aggiungo alcuni nella mia molla, la mappa si riempie con quelli, usando i loro id come chiavi.
Sono così confuso qui e ho usato la primavera in quantità decente in passato. Se qualcuno ha idea di cosa diavolo sta succedendo qui sarei molto grato.
Grazie in anticipo.
Inoltre, ho visto questa domanda: Auto-wiring a List using util schema gives NoSuchBeanDefinitionException
Ma la soluzione non è quella di utilizzare @Resource, che sto già facendo ..
L'Autowired sta eseguendo l'override della Risorsa e quindi Spring sta cercando il primo oggetto Mappa che ha il contesto di primavera. Questo è il motivo per cui ottieni la chiave che hai menzionato come output. – dennisjtaylor
In realtà ciò che accade è che se si usa @Autowired su una qualsiasi raccolta, cercherà qualsiasi bean che corrisponda al qualificatore (o tutti i bean di quel tipo se non si dispone di un qualificatore) e li aggiungerà alla raccolta. Se non si dispone di alcun bean di quel tipo, si otterrà un'eccezione "nessun bean trovato, almeno uno previsto" durante l'autowiring di quell'oggetto. – Craig
oggi ho passato 3 ore su questo :( – Nayn