Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建;“单身人士”;将保存静态hashmap的Bean_Java_Spring_Concurrency_Singleton_Spring 3 - Fatal编程技术网

Java 如何创建;“单身人士”;将保存静态hashmap的Bean

Java 如何创建;“单身人士”;将保存静态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%了解您的需求

我需要共享静态hashmaps,它将在运行时使用Spring3.1初始化

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

hashmap在运行时也可以修改,并且它必须适用于我的所有SpringBean

  • 只要应用程序在运行,保存静态映射的bean就必须是活动的
  • 所有Springbean都需要访问该bean
  • 哈希映射需要是并发的和线程安全的。hashmap可能有大约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成为一个单例并全局访问。这是框架中非常常见的特性。