Я не проверял, но я думаю, что поддержка 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
?
Также обратите внимание, что я мог бы внедрить MultiKeyMap
, созданный как компонент, используя аннотацию @Autowired
, но я мог быне вводить карту <util:map>
, используя аннотацию @Autowired
.Мне пришлось использовать аннотацию @Resource
от JSR-250.