Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Singleton bean,由多个请求访问和修改_Spring_Spring Mvc - Fatal编程技术网

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

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” 我们如何防止这种情况发生,或

默认情况下,所有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
对象不是线程安全的
变量。
更多关于