2017-06-02 65 views
2

我无法找到一个坚实的答案。我知道控制器的范围是singleton并实例化一次,对于控制器类中的任何成员变量也是如此。在Spring REST中,请求对象是在每个请求上实例化的吗?

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

例如:

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

我想处理/存储或以其他方式改变someObject的状态,但我不知道在处理如何安全是当许多要求,或者我需要显式实例化从入站请求对象深度复制新的SomeObject。

感谢您的帮助!

+0

修改请求参数是安全的。但是,如果Spring将重用该实例或不应该担心(但是,这是非常不可能的,因为池开销远远大于生成新的值对象)。 – eckes

回答

2

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

与任何其他单例类相似,单例对象的实例被重用,但没有传递给方法的参数(除非当您不止一次调用单例时重用该对象)。但是在控制器的情况下,参数是每次都从新的HttpServletRequests创建的,所以没有重用实例的基础。

+0

谢谢!这是有道理的,但我很难找到可以证实它的文档。这听起来像是为了更好的理解,我可以看看HttpServletRequest文档。再次感谢,我真的很感激。 –

相关问题