试图在Spring中实例化一个Map我发现了一个奇怪的(对我来说)行为。 我正在使用以下XML来创建Map:
<bean id="fooBean" class="it.arch.fe.util.Foo">
<property name="prop1" value="val1"></property>
<property name="prop2" value="val2"></property>
</bean>
<bean id="barBean" class="it.arch.fe.util.Foo">
<property name="prop1" value="val3"></property>
<property name="prop2" value="val4"></property>
</bean>
<bean id="mapOfFoos" class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="targetMapClass">
<value>java.util.HashMap</value>
</property>
<property name="sourceMap">
<map>
<entry key="foo" value-ref="fooBean" />
<entry key="bar" value-ref="barBean" />
</map>
</property>
</bean>
我设法在我的代码中实例化和自动化这个Map,但是我遇到了关键问题:
我想要一张带有“foo”和“bar”键的地图,但它们似乎是“fooBean”和“barBean”。
这应该发生吗? 有没有办法使用“键”属性作为键,因为它似乎是明显的行为?
(我不想将bean的名称更改为foo和bar,因为我已经声明了两个带有这些名称的bean,我想要遵循的逻辑需要键是“foo”和“bar” )
编辑:从Trever Shick的回答开始,我找到了解决实际问题的方法,但我仍然试图理解为什么会发生这种情况。答案 0 :(得分:2)
只使用地图,不要使用MapFactoryBean作为mapOfFoos
<beans xmlns:util="http://www.springframework.org/schema/"
xsi:schemaLocation="http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<util:map id="mapOfFoos">
<entry key="foo" value-ref="fooBean" />
<entry key="bar" value-ref="barBean" />
</util:map>
答案 1 :(得分:0)
因为我发现我无法将Map本身实例化为没有MapFactoryBean的bean或另一个bean中的属性,我以另一种方式解决了这个问题:
我使用属性prop1和prop2创建了另一个类InnerFoo,在那里我放置了我在前一个Foo中的属性,所以现在我的Map<String,InnerFoo>
是Foo的唯一属性,这是我的xml片段:
<bean id="fooBean" class="it.arch.fe.util.InnerFoo">
<property name="prop1" value="val1"></property>
<property name="prop2" value="val2"></property>
</bean>
<bean id="barBean" class="it.arch.fe.util.InnerFoo">
<property name="prop1" value="val3"></property>
<property name="prop2" value="val4"></property>
</bean>
<bean id="mapOfFoos" class="it.arch.fe.util.Foo">
<property name="mapping">
<map>
<entry key="foo" value-ref="fooBean" />
<entry key="bar" value-ref="barBean" />
</map>
</property>
</bean>