春天的有状态和无状态豆

时间:2015-03-07 22:09:18

标签: java spring dependency-injection stateless stateful

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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

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

所以这是有状态的bean:

@Component
public class Stateful {
    private int someCounter;

    ...
}

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

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

所以我的例子是线程不安全的反模式,因为这样定义的bean是单例。单身豆必须是无国籍的。

答案 1 :(得分:0)

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

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

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