2010-10-20 3 views
3

Я просто пытаюсь исследовать один случай использования объекта в качестве значения на карте весны. Вот мой примерВопрос о конкретном случае использования весной <util:map>

<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 для каждого ключа с требуемыми значениями конструктора. Есть ли лучший способ сделать это, указав параметры внутри самой декларации карты?

Любой указатель будет высоко оценен.

Thanks

+0

Я думаю, что вы сделали ошибку в вашем примере. Вместо value = "testLine", возможно, вы имели в виду значение-ref = "testLine"? – nanda

+0

вы правы ... Я предполагаю, что это была опечатка, я имею в виду value-ref – Shamik

ответ

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> 
+0

Спасибо, скаффман, именно это я и искал ... – Shamik

1

Если testLine s просто проверить данные, а не регулярные бобы, вы можете использовать более легкий подход, чтобы объявить их, к примеру, Spring Expression Language (с весны 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> 
+0

Спасибо за решение axtavt ... ценю вашу помощь – Shamik

Смежные вопросы