【问题标题】:Define guava HashBasedTable/Table in spring xml config在 spring xml config 中定义 guava HashBasedTable/Table
【发布时间】:2014-05-27 19:22:05
【问题描述】:

我正在尝试在 spring xml 配置文件中创建和填充番石榴 HashBasedTable,但我无法做到。

我的桌子是这样的:

Table<String, Foo, Bar> myTable;

我已经在我的 xml 中尝试过,但不知道如何将新值放入表中:

<property name="myTable">
        <bean class="com.google.common.collect.HashBasedTable" factory-method="create">
            <!--- how do I insert value in here??? -->
        </bean>
</property>

【问题讨论】:

    标签: java xml spring guava xmltable


    【解决方案1】:

    如果您只想在 xml 中执行此操作,这有点棘手:我看到 guava 没有提供太多选项来将值放入该表中。 有一种方法,但是对于多个插入来说很奇怪:

    <bean id="myTable" class="com.google.common.collect.HashBasedTable" factory-method="create" />
    
    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject">
            <ref local="myTable" />
        </property>
        <property name="targetMethod">
            <value>put</value>
        </property>
        <property name="arguments">
            <list>
                <value>1</value>
                <value>1</value>
                <value>value</value>
            </list>
        </property>
    </bean>
    

    【讨论】:

      【解决方案2】:

      如果您不必专门使用 xml,您可以使用一些 Java 使您的配置更具可读性。

      你可以创建一个 Utility 方法:

      public class Utils {
      
          public static Table tableFromMap(Map<Object, Map<Object, Object>> map){
              Table ret = null;
      
              if(map != null){
                  ret = HashBasedTable.create();
      
                  for(Object k1 : map.keySet()){
      
                      if(map.get(k1) != null){
                          for(Object k2 : map.get(k1).keySet()){
                              ret.put(k1, k2, map.get(k1).get(k2));
                          }
                      }
                  }
              }
      
              return ret;
          }
      }
      

      并将其添加到您的配置中

      <bean id="mytable" class="it.myproject.Utils" factory-method="tableFromMap">
              <constructor-arg>
                  <util:map>
                      <entry key="A">
                          <util:map>
                              <entry key="B" value="C" />
                              <entry key="D" value="E" />
                          </util:map>
                      </entry>
                  </util:map>
              </constructor-arg>
          </bean>
      

      生成此表:

      A | B | C
      A | D | E
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-16
        • 1970-01-01
        • 1970-01-01
        • 2013-12-20
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        相关资源
        最近更新 更多