关于spring <util:map> </util:map>的特定用例的问题

时间:2010-10-20 22:58:04

标签: spring

我只是想探索一个使用对象作为弹簧贴图中的值的用例。这是我的例子

<util:map id="someSourceMap" map-class="java.util.HashMap">
<entry key="source1" value="testLine"/>
<entry key="source2" value="testLine2"/>
</util:map>

<bean id="testLine1" class="com.test.ProductLineMetadata" scope="prototype">
<constructor-arg value="PRODUCT_LINE_1"></constructor-arg>
<constructor-arg value="TYPE_1"></constructor-arg>
</bean>

<bean id="testLine2" class="com.test.ProductLineMetadata"scope="prototype">
<constructor-arg value="PRODUCT_LINE_2"></constructor-arg>
<constructor-arg value="TYPE_2"></constructor-arg>
</bean>

我想要实现的是创建一个映射,其中值将是ProductLineMetadata对象的新实例,其中不同的参数通过构造函数参数设置。我不想为每个具有所需构造函数值的键创建单独的bean条目。有没有更好的方法通过以某种方式指定地图声明本身内的参数来做到这一点?

任何指针都将受到高度赞赏。

由于

2 个答案:

答案 0 :(得分:5)

你的意思是这样的吗?

<util:map id="someSourceMap" map-class="java.util.HashMap">
  <entry key="source1">
    <bean class="com.test.ProductLineMetadata">
      <constructor-arg value="PRODUCT_LINE_1"/>
      <constructor-arg value="TYPE_1"/>
    </bean>
  </entry>
  <entry key="source2">
    <bean class="com.test.ProductLineMetadata">
      <constructor-arg value="PRODUCT_LINE_2"/>
      <constructor-arg value="TYPE_2"/>
    </bean>
  </entry>
</util:map>

答案 1 :(得分:1)

如果你的testLine只是测试数据而不是常规bean,你可以使用更轻量级的方法来声明它们,例如,Spring Expression Language(自Spring 3开始):

<util:map id="someSourceMap" map-class="java.util.HashMap"> 
    <entry key="source1" 
        value="#{new com.test.ProductLineMetadata('PRODUCT_LINE_1', 'TYPE_1')}"/> 
    <entry key="source2" 
        value="#{new com.test.ProductLineMetadata('PRODUCT_LINE_2', 'TYPE_2')}"/> 
</util:map>