我有一个spring bean让我们说BeanA和范围默认是通过构造函数注入的。我有实例变量c,我没有使用它,它在method1和method2中使用。注意C没有注入。但是在多线程环境中我因为变量C而面临问题。由于我的unserstand默认范围是单身,所以这应该有用吗?问题就像不同用户同时尝试访问bean一样他们正在获得陈旧的c实例例如让用户1实例化c = hello .user 2看到同样的问题。我想了解实例变量的行为如果不是注入并用于不同的方法?
class BeanA{
private A a,
private B b;
private C c;
public BeanA( A a, B b){
this.a=a;
this.b=b;
}
public method1(){
c= //assignSomething
}
public method2(){
c= //assignSomethingElse
}
}
答案 0 :(得分:1)
由于您只有一个Bean A实例,所有用户将共享同一个对象。这将导致所有线程只使用一个变量C.因此,线程之间共享C的值。这是预期的行为。
它与弹簧注射无关。它的基础是java语言本身。如果您需要不同的BeanA实例,那么您需要根据需要定义其范围以请求(如果是webapplicaton)或原型。
如果你陈述你想要实现的目标,那将是非常有帮助的。