定义并发哈希集spring bean?

时间:2012-04-02 12:44:09

标签: java xml spring spring-mvc web.xml

在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>?   >

非常感谢!

2 个答案:

答案 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定义的一些信息。