У меня есть две карты, определенные через <util:map>
(один должен использоваться, другой - эталонная карта, которую будут использовать другие). Я хочу передать (импортировать/объединить) значения одной карты в другую, т.е.
CommonMap
-> "someKey" : "someValue"
-> "someOtherKey" : "someOtherValue"
Map1
-> grab all key value pairs in 'CommonMap'
Я попробовал более простой пример определения общей карты и попытался ссылаться на нее для инъекции свойств:
EDIT # 2 Исходная проблема решена благодаря ответам ниже и теперь основной вопрос
<?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.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<bean id="mainBean" class="SpringTest.SpringTest">
<property name="myBean" ref="myFirstBean"/>
</bean>
<bean id="myFirstBean" class="SpringTest.MyBean">
<constructor-arg value="Hello!"/>
<property name="myMap" ref="myLookup" />
</bean>
<util:map id="myLookup">
<entry key="myKey" value="142"/>
<entry key="myOtherKey" value="7"/>
</util:map>
Как создать вторую <map>
и указать все значения myLookup
в ней?
ИЗМЕНИТЬ № 3 подробнее о том, что я пробовал
Попытка этого
<bean id="myFirstBean" class="SpringTest.MyBean">
<constructor-arg value="Hello!"/>
<property name="myMap" ref="myLookup" />
</bean>
<util:map id="commonLookup">
<entry key="myKey" value="142"/>
<entry key="myOtherKey" value="7"/>
</util:map>
<bean id="myLookup" parent="commonLookup">
<util:map merge="true" />
</bean>
но получить эту ошибку
Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 25 in XML document from class path resource [configuration-spring.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 25; columnNumber: 40; cvc-complex-type.3.2.2: Attribute 'merge' is not allowed to appear in element 'util:map'.
Согласно qaru.site/questions/1964397/...:
<bean id="myFirstBean" class="SpringTest.MyBean">
<constructor-arg value="Hello!" />
<property name="myMap" ref="myLookup" />
</bean>
<bean id="commonLookup"
class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="sourceMap">
<map>
<entry key="myKey" value="142" />
<entry key="myOtherKey" value="7" />
</map>
</property>
</bean>
<bean id="myLookup" parent="commonLookup"
class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="sourceMap">
<map merge="true">
<entry key="myLookupKey" value="12" />
</map>
</property>
</bean>
Убедитесь, что декларация пространства имен util
полностью определена в теге beans
в файле контекста приложения
<?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">
xmlns:util