Java 如何创建;“单身人士”;将保存静态hashmap的Bean
我需要共享静态hashmaps,它将在运行时使用Spring3.1初始化 我需要创建一个真正的单例bean(不一定是单例范围),它将保存我所有的静态哈希映射 hashmap在运行时也可以修改,并且它必须适用于我的所有SpringBeanJava 如何创建;“单身人士”;将保存静态hashmap的Bean,java,spring,concurrency,singleton,spring-3,Java,Spring,Concurrency,Singleton,Spring 3,我需要共享静态hashmaps,它将在运行时使用Spring3.1初始化 我需要创建一个真正的单例bean(不一定是单例范围),它将保存我所有的静态哈希映射 hashmap在运行时也可以修改,并且它必须适用于我的所有SpringBean 只要应用程序在运行,保存静态映射的bean就必须是活动的 所有Springbean都需要访问该bean 哈希映射需要是并发的和线程安全的。hashmap可能有大约100个条目,并且将以非常高的速率被访问 我怎样才能做到这一点?提前感谢,我不是100%了解您的需求
我怎样才能做到这一点?提前感谢,我不是100%了解您的需求,但您可以按部分创建自己的范围,这将确保纯单例实例和可注入所有bean。也许你可以通过使用合适的同步方法或映射来解决线程安全问题,我同意@Kevin的评论(
ConcurrentHashMap
beans),但刚刚发现了尼斯Spring 3.1的新增内容:。文件说:
用于在使用时轻松配置
在弹簧容器内
我还发现,它建议使用带有@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的东西很好地集成。普通的单例作用域bean持有ConcurrentHashMaps有什么问题?为什么映射必须是静态的?普通的单例bean没有问题,除了我需要这个bean在我的应用程序运行时一直处于活动状态。所谓“真正的单例bean”是指数据的持久存储(在服务器关闭并记住启动数据后)还是在服务器启动后创建新的hashmap?如果是第二种情况,单例作用域是完全可以的。但是为什么我需要缓存呢?只需要一个可以保存可以修改的静态访问数据的单例。我不能创建一个不使用自定义作用域的纯单例实例吗?这不是有点开销吗?为什么你认为这可能是开销呢?因为我确信已经有已知的作用域\方法可以使bean成为一个单例并全局访问。这是框架中非常常见的特性。