Spring no puede autoajinar Map bean

Definí un mapa en spring como tal:

    

Y luego estoy autoarriendo este bean a una propiedad definida como:

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

Al hacer esto, se lanza una excepción diciendo que:

Causado por: org.springframework.beans.factory.BeanCreationException: error al crear bean con el nombre ‘DutyCreator’: la inyección de las dependencias de autocable falló; la excepción anidada es org.springframework.beans.factory.BeanCreationException: no se pudo autocablear el campo: private java.util.Map DutyCreator.additionalParams; la excepción anidada es org.springframework.beans.factory.NoSuchBeanDefinitionException: no se ha encontrado ningún bean de tipo [java.lang.String] para la dependencia [map with value type java.lang.String]: se espera al menos 1 bean que califique como candidato de autowire por esta dependencia. Anotaciones de dependencia: {@ org.springframework.beans.factory.annotation.Autowired (required = true), @ org.springframework.beans.factory.annotation.Qualifier (value = AdditionalParams)}

Causado por: org.springframework.beans.factory.NoSuchBeanDefinitionException: No se ha encontrado ningún bean de tipo [java.lang.String] para la dependencia [map with value type java.lang.String]: se esperaba al menos 1 bean que califique como candidato de autowire por esta dependencia. Anotaciones de dependencia: {@ org.springframework.beans.factory.annotation.Autowired (required = true), @ org.springframework.beans.factory.annotation.Qualifier (value = AdditionalParams)}

¿Algunas ideas?

Aclamaciones.

A partir de la spring 4.3, @Autowired puede inyectar listas y mapas y el código dado en la pregunta funcionaría:

Dicho esto, a partir de 4.3, los tipos de colecciones / mapas y matrices se pueden emparejar a través del algoritmo de coincidencia de tipos @Autowired de Spring, siempre que la información del tipo de elemento se conserve en firmas de tipo de retorno @Bean o jerarquías de herencia de recostackción.

Pero con una versión de Spring inferior, no puedes autocablear una colección como esa. Sin embargo, puedes hacer lo siguiente:

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

o incluso:

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

Verifique los documentos de spring , la sección de consejos:

los beans que se definen a sí mismos como una colección o tipo de mapa no se pueden inyectar a través de @Autowired, porque la coincidencia de tipos no se aplica correctamente a ellos. Use @Resource para tales granos

Parece que su @Qualifier (value = “AdditionalParams”) no funciona.

Intenta usar el mapa siguiendo la anotación:

 @Resource private Properties AdditionalParams; 

y manteniendo su archivo applicationContext.xml intacto.

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

// dentro de tu llamada

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

Esta solución funciona bien para mí