繁体   English   中英

Spring 中的有状态和无状态 bean

[英]Stateful and stateless beans in Spring

Spring中有状态无状态bean是什么意思? 我用谷歌搜索了很多,但找不到满意的答案。

任何帮助,将不胜感激。

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

所以这是有状态的bean:

@Component
public class Stateful {
    private int someCounter;

    ...
}

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM