Spring Singleton bean,通过多个请求访问和修改

时间:2016-01-08 02:49:51

标签: spring spring-mvc

默认情况下,所有spring bean都是Singleton,所以当容器加载时,所有定义的bean都被创建。 现在如果我有一个豆说“人”并且它有一个属性“名称”,当第一个请求来时说r1,它改变了pe​​rson.name =“spring”,这个请求将需要这个bean说x秒后,现在在r1的等待时间,比如说r2修改了person.name = springmvc的值。

因为bean是单例,r1获取name的值为“springmvc”而不是“spring”,

我们如何防止这种情况或我的理解不对?

2 个答案:

答案 0 :(得分:0)

所以对于Person Bean,听起来你想要它的作用域prototype而不是Singleton(如果你有一个Web感知的Spring ApplicationContext,那么session

为此你应该注释你Person这样的课程:

@Component
@Scope("prototype") 
public class Person { 
     ... Rest of class here...
}

然后每个请求都有自己的Person类实例化,你不必担心这个冲突。

您可以详细了解Springs各种范围here

答案 1 :(得分:0)

实际上,Singleton取决于您配置Bean的方式。如果Person永远不是AnnotationXml Way配置的,Person只是正常的Class,可以创建更多次。
在您的情况下,我认为您创建的Person对象不是Thread Safe变量 更多关于Thread Safe