Подтвердить что ты не робот

Util: карта в Spring, собирающая каждый bean типа карты

У меня есть проблема с картой Spring, которая доводит меня до слез.

Мой Spring выглядит следующим образом:

<?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>

Затем код, в котором я выполняю аутоустановка, следующий: (нерелевантные части опущены):

@Autowired
@Resource(name="mockMap")
Map<String, String> testMap;

@Test
public void testGetGearListActivityOK() {
    for (String key : testMap.keySet()) {
        System.out.println("key = " + key);
    }
}

Удивительно, но это на самом деле даст мне ошибку на этапе автоустановки, в котором говорится, что нет типа beans соответствия String. Однако, если я изменю карту в модульном тесте, который будет определен как Карта, тогда я получаю следующий вывод:

[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

Мне еще не удалось получить ключевую часть записи, чтобы она действительно отображалась как ключ. Если я изменил карту обратно на Карту и добавлю ее в свой Spring, тогда карта будет заполнена теми, которые используют их идентификаторы в качестве ключей.

Я так запутался и использовал Spring приличную сумму в прошлом. Если кто-нибудь подскажет, что здесь происходит, я был бы очень благодарен.

Спасибо заранее.

Кроме того, я увидел этот вопрос: Автоматическая проводка списка с использованием схемы использования дает NoSuchBeanDefinitionException

Но решение есть использовать @Resource, который я уже делаю.

4b9b3361

Ответ 1

Удалить @Autowired и использовать только @Resource (name= "mockMap" )

Ответ 2

используйте только @Resource и измените "testMap" на "mockMap" в вашей конфигурации

Ответ 3

вы не можете автоустанавливать такую ​​коллекцию.

Однако вы можете попробовать следующее:

@Resource(name="mockMap")
private Map<String, String> testMap;

или даже:

@Value("#{mockMap}")
private Map<String, String> testMap;

Проверьте spring docs, раздел советов:

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