gpt4 book ai didi

java - Spring 的原型(prototype)和单例作用域 bean 关于有状态

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:43:20 25 4
gpt4 key购买 nike

我一直在阅读 Spring Framework 的官方文档,我看到了这句话:

As a rule, you should use the prototype scope for all stateful beans and the singleton scope for stateless beans.

这是相关 section 的链接.

是不是因为线程安全,我们不应该对有状态 bean 使用单例作用域?

注意上面的问题:我可以理解为无状态 bean 使用单例作用域。无状态 bean 是不可变的,并且根据定义它们是线程安全的。因此,对这些 bean 使用单例范围将是一个合理的选择。我知道全局状态被认为是邪恶的,并且对有状态 bean 使用单例范围(我假设这些 bean 也可以是可变的)会导致不良影响。给我带来麻烦的是,这些想法在文档中被表述为规则。例如,是什么让某人在单线程环境中对有状态 bean 使用单例作用域?我知道,这仍然不是一个好主意,但无论如何。问题的重点是要知道这条规则背后是否有线程安全以外的基本原理。

最佳答案

这里有两件事,一个是关于状态的,另一个是关于线程安全的。在您设计之前,所有单例类都不一定是线程安全的。状态可以在 Singleton 和 Prototype 范围内维护。据我所知,Spring只为Singleton创建了一个实例,并没有为Singleton提供线程安全。在 Spring 的上下文中,所有的单例都不一定是有状态的或无状态的。

您可以引用下面的链接了解单例线程安全。其他人可能会对这个问题给出更好的建议。

http://dolszewski.com/spring/spring-bean-thread-safety-guide/

关于java - Spring 的原型(prototype)和单例作用域 bean 关于有状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58572107/

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