如何创建将保存静态hashmap的“Singleton”Bean

时间:2012-07-19 15:16:17

标签: java spring concurrency singleton spring-3

我需要共享静态哈希映射,它将在运行时使用Spring 3.1进行初始化。

我需要创建一个真正的单例bean(不一定是单例范围),它将保存我的所有静态哈希映射。

hashmap也可以在运行时修改,并且必须可用于我的所有spring bean。

  1. 只要应用程序正在运行,保存静态映射的bean就必须处于活动状态
  2. 所有春豆都需要访问bean。
  3. 哈希映射需要并发且线程安全。 hashmap可能有100个条目,并且访问速度非常快。
  4. 我怎么能这样做?提前谢谢,

2 个答案:

答案 0 :(得分:1)

我同意@Kevin的评论(ConcurrentHashMap bean),但刚刚发现Spring 3.1的好处:ConcurrentMapCacheFactoryBean。文档说:

  

FactoryBean,以便在使用时轻松配置ConcurrentMapCache   在Spring容器中。

我还发现this blog post,建议使用带有@Cacheable注释的bean:

<bean id="cacheManager"
        class="org.springframework.cache.support.SimpleCacheManager">
    <property name="caches">
        <set>
            <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
                  p:name="default"/>
        </set>
    </property>
</bean>

没有尝试过,但似乎很好地与Spring的东西融为一体。

答案 1 :(得分:0)

我并非100%了解您的需求,但您可以通过3.5.5 Custom scopes部分创建自己的范围,这将确保纯单例实例并可注入所有bean。并且可以通过适当的同步方法或映射来解决线程安全问题