【问题标题】:Stateful and stateless beans in SpringSpring中的有状态和无状态bean
【发布时间】:2015-05-09 08:17:58
【问题描述】:

Spring 中的 statefulstateless bean 是什么意思? 我google了很多,但找不到满意的答案。

任何帮助将不胜感激。

【问题讨论】:

标签: java spring dependency-injection stateless stateful


【解决方案1】:

状态通常由未自动装配的字段变量表示。

所以这是有状态的bean:

@Component
public class Stateful {
    private int someCounter;

    ...
}

Stateless 是一种 bean,它没有任何类级变量或只有自动装配的单例 bean 实例到无状态类型。

基本上,所有可以更改该 bean 及其依赖树(方法中的局部变量除外)中的值的东西都是状态,应尽可能避免。

所以我的例子是线程不安全的反模式,因为这样定义的 bean 是单例的。而且单例 bean 必须是无状态的。

【讨论】:

  • 感谢您的回答。这真的很有帮助。如果这种方式有缺陷,你会推荐什么模式?我正在考虑内存中,完全缓存在应用程序的内存中,用例。谢谢!
【解决方案2】:

基本上 Spring 不允许有状态的 bean。如果你使用 Singleton - 你有问题 - 下一次调用将“看到”旧数据。如果您使用 Prototype - 对该 bean 的任何方法的每次调用都会导致一个新的类实例,这又不是您想要的..

解决方案似乎是 - 在需要有状态类时使用 new 关键字。

或者使用剩余的请求或会话范围,但是这些仅在 Web 容器中可用..

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2011-12-17
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多