Spring中的有状态和无状态 bean是什么意思? 我搜索了很多,但找不到满意的答案。
任何帮助将不胜感激。
答案 0 :(得分:3)
状态通常由未自动装配的字段变量表示。
所以这是有状态的bean:
@Component
public class Stateful {
private int someCounter;
...
}
Stateless是bean,它没有任何类级别变量,或者只有自动装配的单例bean实例没有无状态类型。
基本上所有可以改变该bean中的值的东西和它的依赖树(方法中的局部变量除外)都是状态,应尽可能避免。
所以我的例子是线程不安全的反模式,因为这样定义的bean是单例。单身豆必须是无国籍的。
答案 1 :(得分:0)
基本上,Spring不允许使用有状态的bean。如果您使用Singleton-您有问题-下一次调用将“看到”旧数据。如果您使用Prototype,则每次调用该bean的任何方法都将导致一个新的类实例,这又不是您想要的。
解决方案似乎是-每当需要状态类时都使用new
关键字。
或使用剩余的请求或会话范围,但是这些仅在Web容器中可用。