加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用Spring注入Google Guava Hashmultimap

发布时间:2020-12-15 08:37:31 所属栏目:Java 来源:网络整理
导读:是否可以提供创建Multimap String,String的示例.用 Spring? 我很想知道如何在应用程序上下文XML文件中完成它. 解决方法 Google Collections被弃用赞成 Guava,所以我将回答关于番石榴的问题. 我将使用这个Bean类: public class Bean{ private MultimapStrin
是否可以提供创建Multimap< String,String>的示例.用 Spring?

我很想知道如何在应用程序上下文XML文件中完成它.

解决方法

Google Collections被弃用赞成 Guava,所以我将回答关于番石榴的问题.

我将使用这个Bean类:

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:

<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的更复杂方法之一,则必须将供应商创建为Java类.如果您只想要一个原始实例化供应商,您可以将其创建为Spring FactoryBean:

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的用法保持不变.只需确保它为每次调用返回一个新实例.)

现在您可以连接更复杂的方法.例:

<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:3.3.2.2 Instantiation with a static factory method中的相应章节

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读