如何在 java springs 中注入 Map<String, List>?

Posted

技术标签:

【中文标题】如何在 java springs 中注入 Map<String, List>?【英文标题】:How to inject a Map<String, List> in java springs? 【发布时间】:2011-07-17 22:13:09 【问题描述】:

如何在 java spring 框架中注入 Map? 如果可能,请提供一些示例代码。

以下合法吗?

<property name="testMap">
    <map>
        <entry>
            <key>
                <value>test</value>
            </key>
            <value>
                <list>
                    <value>String</value>
                    <value>String</value>
                </list>
            </value>
        </entry>
    </map> 
</property>

【问题讨论】:

【参考方案1】:

首先在applicationContext.xml 中定义这样的地图:

<util:list id="list1">
    <value>foo@bar.com</value>
    <value>foo1@bar.com</value>
</util:list>

<util:list id="list2">
    <value>foo2@bar.com</value>
    <value>foo3@bar.com</value>
</util:list>

<util:map id="emailMap" value-type="java.util.List">
    <!-- Map between String key and List -->
    <entry key="entry1" value-ref="list1" />
    <entry key="entry2" value-ref="list2" />
    ...
</util:map>

然后像这样在你的任何 bean 中使用这个 Map:

<bean id="myBean" class="com.sample.beans">
    <property name="emailMap" ref="emailMap" />
</bean>

【讨论】:

如何在 .properties 文件中执行此操作? 请查看:***.com/a/50979119/548225【参考方案2】:

我认为您的语法不合法,因为 spring 在处理 bean 配置 xml 时会抛出 org.xml.sax.SAXParseException

删除&lt;list&gt; 周围的&lt;value&gt; 标记后应该可以工作。

<property name="testMap">
    <map>
        <entry>
            <key>
                <value>test</value>
            </key>

             <list>
                    <value>String</value>
                    <value>String</value>
             </list>
        </entry>
    </map> 
</property>

【讨论】:

【参考方案3】:

这是我的例子:

<bean class="com.common.handlermgmnt.HandlerMapAdder">
    <constructor-arg index="0" type="java.util.Map">
        <map key-type="java.lang.String" value-type="com.common.ViewWidget">
            <entry key="DefaultView">
                <bean class="com.common.DefaultViewWidget"/>
            </entry>
            <entry key="AnotherView">
                <bean class="com.common.AnotherViewWidget"/>
            </entry>
        </map>
    </constructor-arg>
    <constructor-arg index="1" type="com.common.handlermgmnt.HandlerManager" ref="widget_handlerManager"/>
</bean>

【讨论】:

【参考方案4】:

使用 SpEL 注入它。 #ID。这对我有用。

在.xml中:

<util:map id="roleLocationMap">
    <entry key="ROLE_ADMIN" value-ref="listA" />
    <entry key="ROLE_USER" value-ref="listB" />
</util:map>

在.java中

@Autowired
public MainController(
        @Value("#roleLocationMap") final Map<String, List<String>> roleLocationMap) 
    this.roleLocationMap = roleLocationMap;

【讨论】:

如何在 .properties 文件中做到这一点?【参考方案5】:

我自己也遇到过这种情况。如果不需要在其他地方将列表值作为独立 bean 重用,您可以使用这个较短的版本,而不使用“value-ref”:

<util:map id="mymap">
    <entry key="key1">
        <util:list>
            <value>val1</value>
            <value>val2</value>
        </util:list>
    </entry>
    <entry key="key2">
        <util:list>
            <value>val2</value>
            <value>val3</value>
            <value>val4</value>
        </util:list>
    </entry>
</util:map> 

并且,将它连接到您的 Java 代码中,如下所示:

@Resource(name="mymap")
Map<String, List<String>> mapKey_List;

【讨论】:

以上是关于如何在 java springs 中注入 Map<String, List>?的主要内容,如果未能解决你的问题,请参考以下文章

Spring3实战第二章第二小节 IOC依赖注入 list和map集合

Spring注入-Map

求助:spring mvc 注解方式 如何注入map 和 list

JAVA spring MVC 前台如何取得后台返回的map类型的数据?

使用java Spring将值注入Hashmap

Spring认证-Spring注入集合