默认情况下,所有spring bean都是Singleton,所以当容器加载时,所有定义的bean都被创建。 现在如果我有一个豆说“人”并且它有一个属性“名称”,当第一个请求来时说r1,它改变了person.name =“spring”,这个请求将需要这个bean说x秒后,现在在r1的等待时间,比如说r2修改了person.name = springmvc的值。
因为bean是单例,r1获取name的值为“springmvc”而不是“spring”,
我们如何防止这种情况或我的理解不对?
答案 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
永远不是Annotation
或Xml Way
配置的,Person
只是正常的Class
,可以创建更多次。
在您的情况下,我认为您创建的Person
对象不是Thread Safe
变量
更多关于Thread Safe