[英]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.