繁体   English   中英

在spring xml config中定义guava HashBasedTable / Table

[英]Define guava HashBasedTable/Table in spring xml config

我正在尝试在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>

如果你想在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>

如果您不必专门使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM