请参考下面的示例。我想知道如果我在下面指定作用域或不指定作用域是否会有什么不同。谢谢
@RestController
@RequestScope
@RequestMapping("/api/v1/user")
public class UserResource {
@GetMapping("/addresscheck")
public String getAddress() {
return customer.getAddress();
}
}
// Here does it matter I define the scope or not? is it still going to be treated as one per request?
@RestController
@RequestMapping("/api/v1/user")
public class UserResource {
@GetMapping("/addresscheck")
public String getAddress() {
return customer.getAddress();
}
}发布于 2020-06-20 04:08:09
默认情况下,所有Spring托管bean都有singleton作用域。因此,在您的第二个实现中,Spring将只创建一个UserResource对象,并且每次要满足对指定URL的请求时都会提供该对象。
然而,在第一个实现中,由于您使用@RequestScope注释UserResource,Spring将创建一个新的控制器对象来为每个请求提供服务。这意味着您可能在UserResource中维护的任何状态信息都将丢失。还将为每个请求重新创建UserResource的所有成员变量。
虽然我很好奇为什么你想要一个控制器是请求作用域的?如果可能的话,你能分享一下你的用例吗?
这里有一篇关于这个主题的好文章:Spring Bean Scopes
https://stackoverflow.com/questions/62477370
复制相似问题