Spring Singleton bean,由多个请求访问和修改
默认情况下,所有Springbean都是单例的,因此当容器加载时,将创建所有定义的bean。 现在如果我有一个bean,比如说“Person”,它有一个属性“name”,当第一个请求出现时,比如说r1,它会改变Person.name=“spring”,这个请求需要这个bean在x秒后说,现在在r1的等待时间内,比如说r2修改了Person.name=springmvc的值 因此,由于bean是单例的,r1将name的值取为“springmvc”而不是“spring”Spring Singleton bean,由多个请求访问和修改,spring,spring-mvc,Spring,Spring Mvc,默认情况下,所有Springbean都是单例的,因此当容器加载时,将创建所有定义的bean。 现在如果我有一个bean,比如说“Person”,它有一个属性“name”,当第一个请求出现时,比如说r1,它会改变Person.name=“spring”,这个请求需要这个bean在x秒后说,现在在r1的等待时间内,比如说r2修改了Person.name=springmvc的值 因此,由于bean是单例的,r1将name的值取为“springmvc”而不是“spring” 我们如何防止这种情况发生,或
我们如何防止这种情况发生,或者我的理解不正确?因此对于
Person
Bean来说,听起来您希望它的作用域原型
,而不是单例(或者会话
,如果您有一个支持web的Spring应用程序上下文)
为此,您应该像这样注释您的Person
类:
@Component
@Scope("prototype")
public class Person {
... Rest of class here...
}
然后每个请求都有自己的Person
类的实例化,您不必担心这种冲突
您可以了解有关Springs各种作用域的更多信息。事实上,Singleton
取决于您配置Bean的方式。如果您的个人
从未通过注释
或Xml方式
进行配置,个人
只是一个普通的类
,可以创建更多次。
在您的情况下,我认为您创建的Person
对象不是线程安全的变量。
更多关于