回答
這個問題本身措辭不佳。你可以在單例和原型(實例)中都擁有狀態,因爲它是合法的代碼,但在任何情況下你都不需要擁有狀態。自從提到Spring之後,我將試着回答這個問題,以便與Spring合作。
在Spring bean範圍方面,singleton
將導致ApplicationContext
創建單個實例並在需要bean的任何地方使用該實例。 prototype
將導致ApplicationContext
在每次請求bean時創建一個新實例。
它們都是有狀態的。
一個更好的問題可能是「Singleton線程安全嗎?」
如果它包含的狀態是隻讀和不可變的,那麼它是完全線程安全的。如果它是可變的,你必須更加小心。如果是的話,它可能有成爲你的應用程序瓶頸的危險。同步該共享,可寫狀態必須完成。
如果您將「無狀態」稱爲「沒有對話狀態」,即與特定客戶端的對話相關的狀態,則此問題看起來非常合法(儘管措辭不佳)。
在這些條款中,singleton
-scoped bean通常是無狀態的,因爲它們被多個客戶端同時使用,並且它們的狀態不是客戶端特定的。
相反,prototype
-scoped豆經常在談話與特定客戶端的環境中創建的(儘管request
和session
範圍可能更適合有時),讓自己的狀態與這些談話(因爲如果你的bean不需要保持任何對話狀態,你可以使它成爲一個singleton
)。從這個意義上說,prototype
豆是有狀態的。
Prototype bean和Singleton bean都可以持有狀態。但是,根據the Spring documentation,「你應該爲有狀態的所有bean使用原型範圍,而單態範圍應該用於無狀態bean」。
一個無狀態的singleton幾乎是一個靜態方法的集合;它與靜態util類沒有什麼不同,它有多少個實例並不重要:0,1,2或無窮大。
因此單身人士通常是有狀態的。
(這就是爲什麼說在enum中實現的單例自動處理序列化問題是無稽之談。這個單身人士是無國籍的,這個論點是沒有意義的。如果單是有狀態的,該參數被打破)
單不是數據對象,考慮單作爲數據封裝, 點的接入方法,
單可能被破壞,但呈現狀態分別獨立地存儲和單之後將提交重新 (機器人發送問候,摧毀單身是臭名昭著的陷阱)
- 1. 是HashAlgorithm.ComputeHash()有狀態的嗎?
- 2. Android M打盹狀態本身是否有多個狀態?
- 3. `eof``是`ifstream`的有效狀態嗎?
- 4. Redux翻轉卡狀態 - 它應該是有狀態組件嗎?
- 5. 找到狀態的單身豆類
- 6. Ruby中的動態狀態機?狀態機必須是類嗎?
- 7. 是WLST是有狀態的
- 8. 春季競賽條件單身服務有狀態或無狀態
- 9. 無狀態單身人士和併發
- 10. 春天單身物體狀態
- 11. Zend日期是單身嗎?
- 12. servlet是單身人士嗎?
- 13. classobjects是單身人士嗎?
- 14. 有狀態的DLL是狀態模式的良好候選者嗎?
- 15. 在靜態類中有狀態是不好的做法嗎?
- 16. HTTPS有狀態還是無狀態?
- 17. 我的單身人士模板真的是單身人士嗎?
- 18. 保存tmux狀態是可能的嗎?
- 19. API是必需的狀態方法嗎?
- 20. 這個Spring bean是無狀態的嗎?
- 21. BLL應該是無狀態的嗎?
- 22. Linq有無狀態會話的Nhibernate嗎?
- 23. 我的ControllerActionInvoker可以是單身嗎?
- 24. 這是單身人士的好用嗎?
- 25. 這是單身模式的例子嗎?
- 26. Magento - 表格中的狀態是否處於訂單狀態?
- 27. 是IoC容器單身還是靜態?
- 28. 這是在ServiceStack上進行無狀態身份驗證的正確方法嗎?
- 29. WF狀態機可以有多個終端狀態嗎?
- 30. 狀態模式對只讀狀態有用嗎?
參見:http://stackoverflow.com/questions/1989149/spring-wiring-singleton-versus-prototype – 2011-09-29 18:17:55
好了,單當然不是無國籍的。 –
有狀態與無狀態的概念完全不相關的單身人士與不是單身人士的概念(在春天的背景下的原型) – DwB