gpt4 book ai didi

java - 在Spring Singleton Bean中存储状态是一种好习惯吗(添加了线程安全机制)

转载 作者:行者123 更新时间:2023-11-30 07:43:55 25 4
gpt4 key购买 nike

来自 Spring 文档:

7.5.2 (...) As a rule, use the prototype scope for all stateful beans and the singleton scope for stateless beans.

案例:
我有需要存储状态的独立应用程序(例如,一些非常简单的缓存实现为简单的 map )。在我看来,最简单的解决方案是创建具有单例范围的 Sping Bean 并将 HashMap/ConcurrentHashMap 放在那里并添加线程安全的 get/set 方法。

是否是好的解决方案/实践?如果不是 - 什么是正确的方法?

最佳答案

是也不是。使用自定义构建的 Spring 组件可能会导致困惑(竞争条件、缓存丢失...)。

那怎么办?

为什么不简单地使用 Spring 的 CacheManager ?它可以作为 bean 手动注入(inject)。缓存可以是“设置”或“获取”。您可以使用缓存逐出策略使其完全注解驱动:

// Cache collection after the first invocation
@Cacheable("people")
public List<Person> getPeople() {...}


// Refresh entries after altering or inserting a new instance of Person
@CacheEvict(value="people", allEntries = true)
public Person save(Person person) {...}

默认的 CacheManager 实现在后台使用 ConcurentHashMap

关于java - 在Spring Singleton Bean中存储状态是一种好习惯吗(添加了线程安全机制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52945260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com