我需要共享静态哈希映射,它将使用 Spring 3.1 在运行时初始化。
我需要创建一个真正的单例 bean(不一定是单例范围)来保存我所有的静态哈希图。
hashmap 也可以在运行时修改,并且它必须可用于我所有的 spring bean。
- 只要应用程序正在运行,保存静态映射的 bean 就必须处于活动状态
- 所有spring bean都需要访问bean。
- 哈希图需要是并发的和线程安全的。hashmap 可能有 100 个条目,并且会以非常高的速率访问。
我怎么能做到这一点?提前致谢,
我需要共享静态哈希映射,它将使用 Spring 3.1 在运行时初始化。
我需要创建一个真正的单例 bean(不一定是单例范围)来保存我所有的静态哈希图。
hashmap 也可以在运行时修改,并且它必须可用于我所有的 spring bean。
我怎么能做到这一点?提前致谢,
我同意@Kevin 的评论(ConcurrentHashMap
豆类),但刚刚发现不错的 Spring 3.1 补充:ConcurrentMapCacheFactoryBean
. 文档说:
FactoryBean用于在 Spring 容器中使用时轻松配置ConcurrentMapCache 。
我还发现了这篇博客文章,它建议使用带有@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 的东西很好地集成在一起。
我不是 100% 了解您的需求,但您可以通过第3.5.5 节自定义范围创建自己的范围,这将确保纯单例实例并可注入所有 bean。并且可能您可以通过使用适当的同步方法或映射来解决线程安全问题