首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Spring注入Google Guava Hashmultimap

使用Spring注入Google Guava Hashmultimap
EN

Stack Overflow用户
提问于 2011-01-07 13:41:35
回答 1查看 3.1K关注 0票数 3

可以提供一个使用Spring创建Multimap<String, String>的示例吗?

我很好奇如何在应用程序上下文XML文件中完成此操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-07 21:24:12

支持Guava而不推荐使用Google Collections,所以我将回答有关Guava的问题。

我将使用这个Bean类:

代码语言:javascript
运行
复制
public class Bean{
    private Multimap<String, String> map;
    public void setMap(Multimap<String, String> map){
        this.map = map;
    }
}

惟一可以轻松连接(仅使用XML )的Guava Multimap工厂方法是Multimaps.forMap(existingMap)方法。下面是XML:

代码语言:javascript
运行
复制
<bean class="foo.bar.Bean">
    <property name="map">
        <bean class="com.google.common.collect.Multimaps"
            factory-method="forMap">
            <constructor-arg>
                <bean class="java.util.HashMap" />
            </constructor-arg>
        </bean>
    </property>
</bean>

如果您想要在Multimaps类中使用更复杂的Supplier-based方法,则必须将Supplier创建为Multimaps类。如果您只需要一个原语实例化Supplier,那么您可以将其创建为一个Spring FactoryBean

代码语言:javascript
运行
复制
public class SupplierFactoryBean<T> extends AbstractFactoryBean<Supplier<T>>{

    private final Class<T> type;
    private final Supplier<T> supplier;

    public SupplierFactoryBean(final Class<T> type){
        this.type = type;
        this.supplier = new Supplier<T>(){
            @Override
            public T get(){
                try{
                    return type.newInstance();
                } catch(final Exception e){
                    throw new IllegalStateException(e);
                }
            }
        };
    }

    @Override
    public Class<?> getObjectType(){ return type; }

    @Override
    protected Supplier<T> createInstance() throws Exception{
        return supplier;
    }
}

(您也可以将上面的类建模为一个不带FactoryBean的Supplier类,Spring的用法保持不变。只要确保每次调用都返回一个新实例即可。)

现在,您可以连接更复杂的方法。示例:

代码语言:javascript
运行
复制
<bean class="foo.bar.Bean">
    <property name="map">
        <bean class="com.google.common.collect.Multimaps"
            factory-method="newSetMultimap">
            <constructor-arg>
                <bean class="java.util.HashMap" />
            </constructor-arg>
            <constructor-arg>
                <bean class="foo.bar.SupplierFactoryBean">
                    <constructor-arg value="java.util.TreeSet" />
                </bean>
            </constructor-arg>
        </bean>
    </property>
</bean>

上面的两个例子都使用静态工厂方法。下面是Spring Reference中的相应章节:

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4622821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档