gpt4 book ai didi

java - 使用 Spring 注入(inject) Google Guava Hashmultimap

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:34:31 26 4
gpt4 key购买 nike

是否可以提供创建 Multimap<String, String> 的示例?使用 Spring ?

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

最佳答案

Google Collections已弃用 Guava ,所以我会回答有关 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>

如果你想要一个更复杂的Supplier Multimaps 中基于方法的方法类,您必须将供应商创建为 Java 类。如果您只想要一个原始实例化 Supplier,您可以将其创建为 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

关于java - 使用 Spring 注入(inject) Google Guava Hashmultimap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4622821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com