A mola não pode autowire o feijão do mapa

Eu defini um mapa na primavera como tal:

    

E então eu estou autowiring este bean para uma propriedade definida como:

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

Ao fazer isso, a exceção é lançada dizendo que:

Causado por: org.springframework.beans.factory.BeanCreationException: Erro ao criar bean com o nome ‘DutyCreator’: Falha na injeção de dependencies autowired; exceção aninhada é org.springframework.beans.factory.BeanCreationException: Não foi possível autowire campo: private java.util.Map DutyCreator.additionalParams; exceção aninhada é org.springframework.beans.factory.NoSuchBeanDefinitionException: Nenhum bean correspondente do tipo [java.lang.String] localizado para dependência [map com tipo de valor java.lang.String]: esperado pelo menos 1 bean que se qualifica como candidato autowire para essa dependência. Anotações de dependência: {@ org.springframework.beans.factory.annotation.Autowired (required = true), @ org.springframework.beans.factory.annotation.Qualifier (value = AdditionalParams)}

Causado por: org.springframework.beans.factory.NoSuchBeanDefinitionException: Nenhum bean correspondente do tipo [java.lang.String] localizado para dependência [map with value type java.lang.String]: esperado pelo menos 1 bean que se qualifica como candidato de autowire para essa dependência. Anotações de dependência: {@ org.springframework.beans.factory.annotation.Autowired (required = true), @ org.springframework.beans.factory.annotation.Qualifier (value = AdditionalParams)}

Alguma ideia?

Felicidades.

A partir do Spring 4.3, o @Autowired pode injetar listas e mapas e o código dado na pergunta funcionaria:

Dito isso, a partir de 4.3, os tipos collection / map e array podem ser combinados através do algoritmo de correspondência de tipo @Autowired da Spring, desde que as informações de tipo de elemento sejam preservadas em assinaturas de tipo de retorno @Bean ou hierarquias de inheritance de coleção.

Mas com uma versão mais baixa do Spring, você não pode reproduzir uma coleção como essa. No entanto, você pode fazer o seguinte:

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

ou mesmo:

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

Verifique os documentos da primavera , a seção de dicas:

Os beans que são definidos como um tipo de coleção ou mapa não podem ser injetados por meio de @Autowired, porque a correspondência de tipos não é adequada a eles. Use @Resource para esses beans

Parece que seu @Qualifier (value = “AdditionalParams”) não está funcionando.

Tente usar o mapa seguindo a anotação:

 @Resource private Properties AdditionalParams; 

e mantendo seu arquivo 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 da sua chamada

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

Esta solução funciona bem para mim