Le spring ne peut pas s’embarquer

J’ai défini une carte au spring en tant que telle:

    

Et puis je lance ce haricot à une propriété définie comme:

 private @Autowired @Qualifier(value = "AdditionalParams") Map additionalParams; 

En faisant cela, une exception est lancée en disant que:

Causé par: org.springframework.beans.factory.BeanCreationException: Erreur lors de la création du bean nommé ‘DutyCreator’: L’injection des dépendances automatiquement créées a échoué; l’exception nestede est org.springframework.beans.factory.BeanCreationException: impossible de générer automatiquement le champ: private java.util.Map DutyCreator.additionalParams; exception nestede: org.springframework.beans.factory.NoSuchBeanDefinitionException: Aucun bean correspondant de type [java.lang.Ssortingng] trouvé pour la dépendance [mappe avec le type de valeur java.lang.Ssortingng]: attendu au moins 1 bean qualifié de candidat à sélection automatique pour cette dépendance. Annotations des dépendances: {@ org.springframework.beans.factory.annotation.Autowired (obligatoire = true), @ org.springframework.beans.factory.annotation.Qualifier (valeur = AdditionalParams)}

Causé par: org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean correspondant de type [java.lang.Ssortingng] trouvé pour la dépendance [mappe avec le type de valeur java.lang.Ssortingng]: attendu au moins 1 bean qui se qualifie en tant que candidat autowire pour cette dépendance. Annotations des dépendances: {@ org.springframework.beans.factory.annotation.Autowired (obligatoire = true), @ org.springframework.beans.factory.annotation.Qualifier (valeur = AdditionalParams)}

Des idées?

À votre santé.

A partir de Spring 4.3, @Autowired peut injecter des listes et des cartes et le code donné dans la question fonctionnerait:

Cela dit, à partir de la version 4.3, les types collection / map et array peuvent également être comparés via l’algorithme de correspondance de type @Autowired de Spring, tant que les informations de type d’élément sont conservées dans les signatures de type retour @Bean ou les hiérarchies d’inheritance de collection.

Mais avec une version Spring inférieure, vous ne pouvez pas créer une collection comme celle-ci. Cependant, vous pouvez effectuer les opérations suivantes:

 @Resource(name="AdditionalParams") private Map additionalParams; 

ou même:

 @Value("#{AdditionalParams}") private Map additionalParams; 

Vérifiez les documents de spring , la section des conseils:

Les beans eux-mêmes définis en tant que collection ou type de carte ne peuvent pas être injectés via @Autowired, car la correspondance de type ne leur est pas correctement appliquée. Utilisez @Resource pour ces beans

On dirait que votre @Qualifier (value = “AdditionalParams”) ne fonctionne pas.

Essayez d’utiliser la carte en suivant les annotations suivantes:

 @Resource private Properties AdditionalParams; 

et en gardant votre fichier applicationContext.xml intact.

 @Autowired ApplicationContext ctx; private  T getBean(Ssortingng qualifier, Class returnType){ //use this for loop to print all bean from ctx. so you wont miss the typo. /*for(Ssortingng s:ctx.getBeanDefinitionNames()) log.info(s);*/ return ctx.getBean(qualifier, returnType); } 

// dans ton appel

  if(providerList == null){ providerList = ctx.getBean("providerList", Map.class); } 

Cette solution fonctionne bien pour moi