Весна не может автоподключить карту

Весной я определил карту:

    

И затем я автоматически создаю этот компонент для свойства, определенного как:

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

Когда вы делаете это, возникает исключение get’s, говорящее, что:

Вызвано: org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем «DutyCreator»: не удалось выполнить инъекцию зависимых от автозапуска; Вложенное исключение – org.springframework.beans.factory.BeanCreationException: Не удалось создать поле autwire: private java.util.Map DutyCreator.additionalParams; Вложенное исключение – org.springframework.beans.factory.NoSuchBeanDefinitionException: не найдено подходящего компонента типа [java.lang.String], найденного для зависимости [map со значением типа java.lang.String]: ожидается как минимум 1 компонент, который квалифицируется как кандидат на автоспуск для этой зависимости. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (required = true), @ org.springframework.beans.factory.annotation.Qualifier (value = AdditionalParams)}

Вызвано: org.springframework.beans.factory.NoSuchBeanDefinitionException: не найдено подходящего компонента типа [java.lang.String], найденного для зависимости [map со значением типа java.lang.String]: ожидается как минимум 1 компонент, который квалифицируется как кандидат на автоспуск для этой зависимости. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (required = true), @ org.springframework.beans.factory.annotation.Qualifier (value = AdditionalParams)}

Есть идеи?

Приветствия.

Начиная с Spring 4.3, @Autowired может вводить списки и карты, и заданный код в вопросе будет работать:

Тем не менее, @Autowired с 4.3, типы коллекции / карты и массивы могут быть сопоставлены также с помощью алгоритма сопоставления типа Spring @Autowired , если информация о типе элемента сохраняется в @Bean типа возвращаемого типа @Bean или иерархиях наследования наборов.

Но с более низкой версией Spring вы не можете автоустановить такую ​​коллекцию. Однако вы можете сделать следующее:

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

или даже:

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

Проверьте весенние документы , раздел «Советы»:

бобы, которые сами определяются как тип коллекции или карты, не могут быть введены через @Autowired, потому что сопоставление типов не относится к ним надлежащим образом. Используйте @Resource для таких компонентов

Кажется, что ваш @Qualifier (value = “AdditionalParams”) не работает.

Попробуйте использовать карту, следуя annotations:

 @Resource private Properties AdditionalParams; 

и сохраняя файл applicationContext.xml неповрежденным.

 @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); } 

// внутри вашего звонка

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

Это решение работает хорошо для меня

  • Как включить область запроса в async task executor
  • Статус HTTP 406. Spring MVC 4.0, jQuery, JSON
  • Как сделать весеннюю инъекционную ценность в статическом поле
  • JSF 2 вставляет Spring bean / service с помощью @ManagedProperty и без xml
  • Загрузка файла с весенних controllerов
  • Перенаправление на внешний URL-адрес из действия controllerа в Spring MVC
  • Определение пространств имен Spring JAXB без использования NamespacePrefixMapper
  • Отслеживание причины «непригодности автопроксирования» Spring
  • Получить список объектов JSON с Spring RestTemplate
  • Как реализованы хранилища Spring Data?
  • Безопасность SecurityContextHolder Spring Security: сеанс или запрос?
  • Давайте будем гением компьютера.