java - 如何创建 "Singleton"Bean 来保存静态 HashMap

标签 java spring concurrency singleton spring-3

我需要共享静态 HashMap ,这些静态 HashMap 将使用 Spring 3.1 在运行时初始化。

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

HashMap 在运行时也可以修改,并且它必须可用于我的所有 Spring beans。

  1. 只要应用程序正在运行,保存静态 map 的 bean 就必须处于 Activity 状态
  2. 该 bean 需要被所有 spring bean 访问。
  3. HashMap 需要并发且线程安全。 HashMap 可能有大约 100 个条目,并且将以非常高的速率访问。

我怎样才能实现这个目标?提前致谢,

最佳答案

我同意@Kevin的评论(ConcurrentHashMap beans),但刚刚发现了很好的 Spring 3.1 添加:ConcurrentMapCacheFactoryBean 。文档说:

FactoryBean for easy configuration of a ConcurrentMapCache when used within a Spring container.

我还发现了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 的东西集成得很好。

关于java - 如何创建 "Singleton"Bean 来保存静态 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563919/

相关文章:

java在不同线程中访问一个对象

Java HotSpot 持续时间极长的年轻 Collection

java - JCheckBox居中

java - 如何在使用 JSOUP/JAVA 解析时保留原始字符串中的 "

java - JAVA 的 JSP 和 HTML 解析器

javascript - nodejs并行回调设计模式

java - 在 Eclipse Luna 中安装新软件总是出现错误 No repository found containing : osgi. bundle,org.eclipse.net4j.jms.api?

java - 使用spring发送soap请求并定义xml

spring - 使用 Spring、JOOQ、Postgres 和 ActiveMQ 时无回滚

java - ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?