java - Spring beans 的键为 Map<String,Foo>

标签 java spring spring-mvc

尝试在 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>

我设法在代码中实例化并 Autowiring 此 map ,但我遇到了按键问题:

我想要一个带有键“foo”和“bar”的 map ,但它们似乎是“fooBean”和“barBean”。

这应该发生吗? 有没有办法使用“key”属性作为键,因为这看起来是显而易见的行为?

(我不想将 bean 的名称更改为 foo 和 bar,因为我已经用这些名称声明了两个 bean,并且我想要遵循的逻辑需要键为“foo”和“bar” )

编辑:从 Trever Shick 的回答开始,我找到了解决实际问题的方法,但我仍在尝试理解为什么会发生这种情况。

最佳答案

只使用 map ,不要为您的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>

关于java - Spring beans 的键为 Map<String,Foo>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19661300/

相关文章:

java - 我什么时候必须沮丧一些事情?

Java:打印语句中的==给出了不同的答案

java - 使用 Spring 添加消息

java - 将字母从按钮传输到 jLabel 组件

java - 找不到 javax.transaction :jta: in maven

java - Spring boot - 设置全局错误处理程序以屏蔽 REST 端点

java - Spring bean 创建错误莫名其妙

java - Maven项目构建异常

java - 如何在没有部署描述符的情况下在 Spring 中注册监听器

java - Spring MVC 和错误 400 : SRVE0295E