在Spring REST中,请求对象是否在每个请求上实例化?

时间:2017-06-02 19:43:56

标签: java spring-mvc jackson

我无法找到一个可靠的答案。我知道控制器是作用域单例并实例化一次,同样适用于控制器类中的任何成员变量。

我的问题:传入的请求对象是每个请求的新实例吗?假设Jackson正在将JSON请求主体映射到请求对象。

例如:

@RequestMapping(path = "/dosomething", method = POST)
@ResponseBody
public SomeObject doSomething(@RequestBody SomeObject someObject) {
    // code here
    return someObject;
}

我想处理/存储或以其他方式更改someObject的状态,但不确定在处理许多请求时有多安全,或者我是否需要显式实例化从入站请求对象中深入复制的新SomeObject。 / p>

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

是。传递给Spring控制器的参数是每次调用的新实例。

与任何其他单例类相似,单例对象的实例被重用,但不会传递给方法中的参数(当然,除非您多次调用单例时重复使用该对象)。但是在控制器的情况下,每次都会从新的HttpServletRequests创建参数,因此没有重用实例的依据。