Как использовать MultiKeyMap из Apache в Spring Framework - PullRequest
1 голос
/ 03 мая 2011

Я сталкивался с MultiKeyMap от Apache Commons и заинтересован в использовании его в среде Spring вместо использования регулярной карты, поскольку мне нужна карта двойного ключа.Dpes кто-нибудь знает, как использовать MultiKeyMap с Spring Framework?

1 Ответ

0 голосов
/ 04 мая 2011

Я не проверял, но я думаю, что поддержка 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.

...