如何构建Map <string,list <string =“”>&gt; Spring中的数据结构</string,>

时间:2014-02-11 05:15:47

标签: java spring dependency-injection hashmap applicationcontext

我正在尝试在Spring中实现这个Java数据结构(我是新手):

Map<String, List<String>> 

我尝试了以下(以及它的变体),但我得到以下异常:

Caused by: org.xml.sax.SAXParseException; lineNumber: XX; columnNumber: YY; cvc-complex-type.2.4.d: Invalid content was found starting with element 'util:list'. No child element is expected at this point.

有人可以告诉我我犯的错误吗?我需要能够使用文字键(String)和值列表构建上面提到的“Map”数据结构。我收录了twp完整的样本“条目”(这些条目不起作用)只是为了显示我想要创建的填充模式。

    <bean .... >
      ...
    <property name="monitoredObjects">
        <util:map map-class="java.util.HashMap">
            <entry key="java.lang:type=GarbageCollector,name=ConcurrentMarkSweep">
                <value>
                    <util:list>
                        <value>HeapMemoryUsage</value>
                        <value>NonHeapMemoryUsage</value>
                    </util:list>
                </value>
            </entry>

            <entry key="java.lang:type=FOO,name=BAR">
                <value>
                    <util:list>
                        <value>YADA-YADA</value>
                        <value>BLAH-BLAH</value>
                    </util:list>
                </value>
            </entry>
        </util:map>
    </property>
      ...
    </bean>

谢谢! =:)

2 个答案:

答案 0 :(得分:1)

我修改了一些并通过删除包含util:list元素的“value”元素来使其工作。换句话说,像这样:

<bean .... >
    ...
   <property name="monitoredObjects">
       <util:map map-class="java.util.HashMap">

           <entry key="java.lang:type=GarbageCollector,name=ConcurrentMarkSweep">
                   <util:list>
                       <value>HeapMemoryUsage</value>
                       <value>NonHeapMemoryUsage</value>
                   </util:list>
           </entry>

           <entry key="java.lang:type=FOO,name=BAR">
                   <util:list>
                       <value>YADA-YADA</value>
                       <value>BLAH-BLAH</value>
                   </util:list>
           </entry>

       </util:map>
   </property>
   ...
</bean>

一如既往地谢谢你!

答案 1 :(得分:0)

首先在applicationContext.xml中定义这样的Map:

 <util:list id="list1">
      <value>foo@bar.com</value>
      <value>foo1@bar.com</value>
   </util:list>

   <util:list id="list2">
      <value>foo2@bar.com</value>
      <value>foo3@bar.com</value>
   </util:list>

   <util:map id="emailMap" value-type="java.util.List">
      <!-- Map between String key and List -->
      <entry key="entry1" value-ref="list1" />
      <entry key="entry2" value-ref="list2" />
      ...
   </util:map>

然后在你的任何bean中使用这个Map:

<bean id="myBean" class="com.sample.beans">
      <property name="emailMap" ref="emailMap" />
   </bean>