0

Spring でマップをインスタンス化しようとすると、(私にとって) 奇妙な動作が見つかりました。次の XML を使用してマップを作成しています。

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

コードでこのマップをインスタンス化して自動配線することに成功しましたが、キーに問題があります。

キーが「foo」と「bar」のマップが欲しかったのですが、それらは「fooBean」と「barBean」のようです。

これは起こるはずですか?明らかな動作のように、「キー」プロパティをキーとして使用する方法はありますか?

(Bean の名前を foo と bar に変更したくありません。これらの名前を持つ 2 つの Bean を既に宣言しており、従うロジックではキーを「foo」と「bar」にする必要があるためです)

編集: Trever Shick の回答から始めて、実際の問題を解決する方法を見つけましたが、なぜこれが起こったのかを理解しようとしています。

4

2 に答える 2

2

マップを使用するだけで、mapOfFoos に MapFactoryBean を使用しないでください

<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>
于 2013-10-29T14:44:07.240 に答える