2017-06-02 82 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文檔。再次感謝,我真的很感激。 –