簡體   English   中英

Spring 的原型和單例作用域 bean 關於有狀態

[英]Spring's prototype and singleton scoped beans with regards to statefulness

我一直在閱讀 Spring Framework 的官方文檔,我遇到了這句話:

通常,您應該對所有有狀態 bean 使用原型作用域,對無狀態 bean 使用單例作用域。

這是相關部分的鏈接。

是因為線程安全,我們不應該對有狀態 bean 使用單例作用域嗎?

關於上述問題的注意事項:我可以理解對無狀態 bean 使用單例范圍。 無狀態 bean 是不可變的,並且根據定義它們是線程安全的。 因此,對這些 bean 使用單例范圍將是一個合理的選擇。 我知道全局狀態被認為是邪惡的,並且對有狀態 bean 使用單例范圍(我假設這些 bean 也可以是可變的)會導致不良影響。 給我帶來麻煩的是,這些想法在文檔中被規定為規則 例如,是什么讓某人在單線程環境中對有狀態 bean 使用單例作用域? 我知道,這仍然不是一個好主意,但無論如何。 問題的重點是要知道這條規則背后是否有線程安全以外的理由。

這里有兩件事,一個是關於狀態的,另一個是關於線程安全的。 在您設計之前,所有單例類都不一定是線程安全的。 狀態可以在 Singleton 和 Prototype 范圍內維護。 據我所知,Spring只為Singleton創建了一個實例,並沒有為Singleton提供線程安全。 在 Spring 的上下文中,所有的單例都不一定是有狀態的或無狀態的。

您可以參考下面的單例線程安全鏈接。 其他人可能會對這個問題提出更好的建議。

http://dolszewski.com/spring/spring-bean-thread-safety-guide/

我一直在閱讀 Spring Framework 的官方文檔,遇到了這句話:

通常,您應該對所有有狀態 bean 使用原型 scope,對無狀態 bean 使用 singleton scope。

這是相關部分的鏈接。

是否因為線程安全,我們不應該將 singleton scope 用於有狀態 bean?

關於上述問題的注意事項:我可以理解將 singleton scope 用於無狀態 bean。 無狀態 bean 是不可變的,根據定義它們是線程安全的。 因此,對這些 bean 使用 singleton scope 將是一個合理的選擇。 我知道全局 state 被認為是邪惡的,並且將 singleton scope 用於有狀態的 bean(我假設這些 bean 也可以是可變的)可能會導致不良影響。 給我帶來麻煩的是,這些想法在文檔中作為一項規則進行了陳述。 例如,是什么讓人們在單線程環境中將 singleton scope 用於有狀態 bean? 我知道,這仍然不是一個好主意,但無論如何。 問題的關鍵是要知道除了線程安全之外,這條規則背后是否還有其他理由。

暫無
暫無

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

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