【发布时间】:2011-05-03 19:46:16
【问题描述】:
我从 Apache Commons 遇到了 MultiKeyMap,我有兴趣在 Spring 框架中使用它而不是使用常规映射,因为我需要双键映射。 Dpes 有人知道如何将 MultiKeyMap 与 Spring 框架一起使用吗?
【问题讨论】:
-
你是什么意思,“使用”?
标签: java spring apache-commons-collection
我从 Apache Commons 遇到了 MultiKeyMap,我有兴趣在 Spring 框架中使用它而不是使用常规映射,因为我需要双键映射。 Dpes 有人知道如何将 MultiKeyMap 与 Spring 框架一起使用吗?
【问题讨论】:
标签: java spring apache-commons-collection
我没有检查,但我猜对 MultiKeyMap 的支持不是 Spring 内置的。
您需要将MultiKey 实例构造为与普通Map 接口方法一起使用的键。最明确的方式是这样的:
<map>
<entry>
<key><bean class="org.apache.commons.collections.keyvalue.MultiKey">
<constructor-arg index="0"><ref bean="KEY_0_REF"/></constructor-arg>
<constructor-arg index="1"><value>KEY_1_VALUE</value></constructor-arg>
</bean></key>
<value>YOUR_VALUE</value>
</entry>
</map>
<map> 元素生成的地图不是MultiKeyMap,因此您需要自己创建:
<bean id="yourMultiKeyMap" class="org.apache.commons.collections.map.MultiKeyMap">
<constructor-arg>
<bean class="org.apache.commons.collections.map.HashedMap">
<constructor-arg>
<map>YOUR_MULTI-KEY_VALUE_PAIRS</map>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
它可以工作(用 Spring 3.0.5 测试过),但是要编写大量的 XML。
使用 spring-util 命名空间,您可以将地图创建部分简化为:
<beans xmlns:util="http://www.springframework.org/schema/util" ...>
...
<util:map id="yourMultiKeyMap" map-class="org.apache.commons.collections.map.MultiKeyMap">
<entry>
...
</entry>
</u:map>
...
</beans>
有没有更短的方法来创建MultiKey 实例?
还请注意,我可以使用 @Autowired 注释将 MultiKeyMap 创建为 bean,但我无法使用 @Autowired 注释注入映射 <util:map>。我不得不使用来自 JSR-250 的 @Resource 注释。
【讨论】:
MultiKey 类的 bean 作为键更短的方法,如答案的第一个代码片段所示。