J'ai un problème de carte de printemps qui me fait pleurer.
Mon printemps ressemble à ceci:
<?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>
Ensuite, le code où je suis auto-câblé est le suivant (parties non pertinentes omises):
@Autowired
@Resource(name="mockMap")
Map<String, String> testMap;
@Test
public void testGetGearListActivityOK() {
for (String key : testMap.keySet()) {
System.out.println("key = " + key);
}
}
Étonnamment, cela me donnera en fait une erreur sur l'étape de câblage automatique, indiquant qu'il n'y a pas de beans correspondant au type String. Cependant, si je modifie la carte dans l'unité-test pour qu'elle soit définie en tant que carte, j'obtiens la sortie suivante:
[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
Je n'ai pas encore réussi à faire en sorte que la section clé de l'entrée apparaisse comme une clé. Si je modifie à nouveau la carte en carte et que j'en rajoute dans ma source, la carte se remplit avec celles-ci, en utilisant leurs identifiants comme clés.
Je suis tellement confus ici et ai utilisé le printemps une quantité décente dans le passé. Si quelqu'un a une idée de ce qui se passe ici, je vous en serais très reconnaissant.
Merci d'avance.
J'ai aussi vu cette question: Le câblage automatique d'une liste à l'aide du schéma util donne à NoSuchBeanDefinitionException
Mais la solution consiste à utiliser @Resource, ce que je fais déjà.
Supprimez @Autowired et utilisez uniquement @Resource (name = "mockMap")
vous ne pouvez pas autoriser une collection comme celle-ci.
Cependant, vous pouvez essayer ces:
@Resource(name="mockMap")
private Map<String, String> testMap;
ou même:
@Value("#{mockMap}")
private Map<String, String> testMap;
Vérifiez la documentation de printemps , la section des conseils:
les beans qui sont eux-mêmes définis comme une collection ou un type de carte ne peuvent pas être injectés via @Autowired, car la correspondance des types ne leur est pas applicable . Utilisez @Resource pour ces haricots
utilisez uniquement @Resource et remplacez "testMap" par "mockMap" dans votre configuration