在Spring中,我可以在XML中定义一个HashSet:
<bean id="subscriberStore" class="java.util.HashSet"/>
并且,我可以在代码中执行以下操作来创建并发哈希集:
subscriberStore = Collections.newSetFromMap(
new ConcurrentHashMap<Subscriber, Boolean>());
但是,有什么方法可以在XML的一步中完成这项工作?例如。类似的东西:
<bean id="subscriberStore" class="java.util.HashSet"/>
< Some code here to set subscriberStore to the result
of Collections.newSetFromMap(new ConcurrentHashMap<Subscriber, Boolean>? >
非常感谢!
答案 0 :(得分:4)
Bean配置:
<!-- The bean to be created via the factory bean -->
<bean id="exampleBean"
factory-bean="myFactoryBean"
factory-method="createInstance"/>
<bean id="myFactoryBean" class="com.rory.ConcurrentHashMapFactory"/>
工厂类:
public class ConcurrentHashMapFactory {
public Set<Subscriber> createInstance() {
Collections.newSetFromMap(new ConcurrentHashMap<Subscriber, Boolean>());
}
}
答案 1 :(得分:0)
您可以使用以下内容:
<bean
id="subscriberStore"
class="java.util.Collections"
factory-method="newSetFromMap"
>
<constructor-arg>
<bean class="java.util.concurrent.ConcurrentHashMap" />
</constructor-arg>
</bean>
但是,如果泛型类型对您很重要,请创建一个自定义的静态工厂方法(在Boris Pavlović中建议为answer)。您可能需要查看this SO entry以获取有关泛型和Spring XML bean定义的一些信息。