gpt4 book ai didi

java - 多线程环境中的 Spring Singleton 行为

转载 作者:行者123 更新时间:2023-12-03 08:26:44 27 4
gpt4 key购买 nike

我是 Spring 的新手。阅读 documentation我发现里面提到了

Bean default scope is a singleton.

如果容器中只有一个实例,则“它在多线程环境中的行为方式”。

通常在任何 Web 应用程序中,都会同时执行多个请求,如果 POJO 类是 Autowiring 的并且同时执行多个请求,则 getter 和 setter 将相互交叉数据。请求 1 设置数据,同时请求 2 覆盖。请求 1 获取请求 2 覆盖的数据。

像 Foo 一样,它是一个 POJO 类,其 get 和 set 不同步。

 @Service
public class Foo {
String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}



@Autowired
private Foo foo;

@RequestMapping(value = "foo" , method = RequestMethod.POST )
public String saveFoo(@RequestBody String fooname){
foo.setName(fooname); // In case of multiple request
//get and set will be happing on same instance could be wrong
return foo.getName();
}

在多线程环境中处理 Autowire 和 POJO 的理想方法是什么?开发人员是否必须提及原型(prototype)范围?

最佳答案

一般来说,服务对象应该是无状态的。您的问题是您将数据直接存储在 Foo 中,这不是它所属的位置。对服务的调用应在方法签名中包含所有必要的参数;持久对象应该保存在某个地方(例如数据库)并通过键引用(可能保存在 HTTP session 中或作为请求参数发送)。

关于java - 多线程环境中的 Spring Singleton 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66445082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com