簡體   English   中英

是Spring MVC控制器單身人士嗎?

[英]Are Spring MVC Controllers Singletons?

我有關於Spring 3 MVC @Controllers的查詢。 當請求進入時,容器是否為每個請求創建一個新的控制器實例(類似於Struts 2中的Action - ThreadLocal ActionContext )或單個實例響應所有請求? 默認情況下,上下文中的控制器bean單例?

Spring 3 MVC應用程序的准則/最佳實踐是什么? 這些設置是否可配置? 應該配置? 如果我的環境是一個集群環境,它會有多大變化 - 我想它不應該因為jvm /容器會有所不同 - 但是一些權威的建議會受到歡迎。

我讀過Spring文檔,但可能我錯過了它。 任何'這就是我們如何實現'答案/指針/鏈接將有所幫助謝謝。

Spring控制器是單例(每個Web應用程序只有一個控制器實例)就像servlet一樣。 通常,改變這種行為是沒有意義的(如果可能的話)。 有關常見陷阱,請參閱關於servlet的線程安全性 ,也適用於控制器。

如果您的應用程序是群集的,請盡可能多地避免狀態。 控制器中的狀態將需要同步以避免線程問題。 此外,您可能會跨服務器復制該狀態 - 非常昂貴且麻煩。

默認情況下,Spring bean是單例。 Spring建議將單例用於無狀態bean,如控制器和DAO,以及狀態bean的原型范圍。

Struts2動作不是單例,因為它們帶有狀態。 Struts2利用動作本身的javabeans屬性來攜帶傳入的請求數據並將其暴露給框架的各個層。

另一方面,Spring使用傳遞給控制器​​的模型對象。 控制器本身不保持狀態,因此單例是有意義的。

控制器是單例,因此如果webapp同時處理大量請求,則可以避免通過關鍵字new創建大量實例。使用控制器單例也可以通過減少年輕GC來減輕JVM的負擔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM