用 Guava 和 Spring 注入一个 synchronizedMultiMap?
Inject a synchronizedMultiMap with Guava & Spring?
documentation for using Guava HashMultimap 强调了在线程安全访问初始化时通过 Multimaps.synchronizedMultimap
包装多重映射的重要性。鉴于此,我知道我可以创建以下多图:
private Multimap<Short, String> successfulMultimap =
Multimaps.synchronizedMultimap(HashMultimap.<Short, String>create());
但是,我的 multimap 需要使用 Spring 注入,因为它将被另一个 class 在我的服务中使用。
没有同步包装器,我知道我可以使用这些方法:
//setter
public void setSuccessfulMultimap(Multimap<Short, String> successfulMultimap) {
this.successfulMultimap = successfulMultimap;
}
<!-- XML configuration -->
<bean id="myBean" factory-method="create" class="com.google.common.collect.HashMultimap"/>
但是由于我需要将其初始化为线程安全的,所以我不知道如何 "spring"-ify 它。有人可以帮助我了解如何注入同步多图或任何好的方法吗?
您应该能够将适当的代码放入 spring set 方法中:
//setter
public void setSuccessfulMultimap(Multimap<Short, String> value) {
successfulMultimap = Multimap.synchronizedMultimap(value);
}
由于它是在对象构造之后设置的,您可能还想使 successfulMultimap
成员成为 volatile
以确保初始化对其他线程可见。
documentation for using Guava HashMultimap 强调了在线程安全访问初始化时通过 Multimaps.synchronizedMultimap
包装多重映射的重要性。鉴于此,我知道我可以创建以下多图:
private Multimap<Short, String> successfulMultimap =
Multimaps.synchronizedMultimap(HashMultimap.<Short, String>create());
但是,我的 multimap 需要使用 Spring 注入,因为它将被另一个 class 在我的服务中使用。
没有同步包装器,我知道我可以使用这些方法:
//setter
public void setSuccessfulMultimap(Multimap<Short, String> successfulMultimap) {
this.successfulMultimap = successfulMultimap;
}
<!-- XML configuration -->
<bean id="myBean" factory-method="create" class="com.google.common.collect.HashMultimap"/>
但是由于我需要将其初始化为线程安全的,所以我不知道如何 "spring"-ify 它。有人可以帮助我了解如何注入同步多图或任何好的方法吗?
您应该能够将适当的代码放入 spring set 方法中:
//setter
public void setSuccessfulMultimap(Multimap<Short, String> value) {
successfulMultimap = Multimap.synchronizedMultimap(value);
}
由于它是在对象构造之后设置的,您可能还想使 successfulMultimap
成员成为 volatile
以确保初始化对其他线程可见。