我无法找到一个可靠的答案。我知道控制器是作用域单例并实例化一次,同样适用于控制器类中的任何成员变量。
我的问题:传入的请求对象是每个请求的新实例吗?假设Jackson正在将JSON请求主体映射到请求对象。
例如:
@RequestMapping(path = "/dosomething", method = POST)
@ResponseBody
public SomeObject doSomething(@RequestBody SomeObject someObject) {
// code here
return someObject;
}
我想处理/存储或以其他方式更改someObject的状态,但不确定在处理许多请求时有多安全,或者我是否需要显式实例化从入站请求对象中深入复制的新SomeObject。 / p>
感谢您的帮助!
答案 0 :(得分:2)
是。传递给Spring控制器的参数是每次调用的新实例。
与任何其他单例类相似,单例对象的实例被重用,但不会传递给方法中的参数(当然,除非您多次调用单例时重复使用该对象)。但是在控制器的情况下,每次都会从新的HttpServletRequests创建参数,因此没有重用实例的依据。