如何在 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
。
删除<list>
周围的<value>
标记后应该可以工作。
<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 mvc 注解方式 如何注入map 和 list