[英]Spring Singleton Vs Singleton Design pattern - Class Loader
Singleton Pattern將實例維護在Spring容器級別,而Singleton Design Pattern將實例維護在Class Loader級別。
還有其他區別嗎?
接下來,我仍然認為上述原因並非有效原因。 事實上,一個應用程序上下文/容器僅被加載到一個類加載器中。 因此在技術上沒有區別。 是正確的,還是我缺少了什么?
好吧,真正的區別不在於類加載,而在於設計原理。 單例模式有其自身的局限性。 它在全局范圍內公開對象,並且很難測試。 但是,通過像Spring或Guice這樣的DI框架進行單例操作不會遇到這些問題。
該SO線程可以幫助您理解。 以及Google-singleton-detector和Misko Hevery的博客也很有趣。
從某種意義上說,使用“真實”單身人士的局限性更大,因為這樣一來,您必然只能創建該類的單個實例(在類加載器中)。
如果使用Spring單例作用域的bean,則可以創建該類的任意多個“單例”實例(只要bean類不是真正的單例)。
因此,從技術上講它們不是同一回事。
這主要是這兩個名稱的共同點。 Singleton模式可確保一個類只有一個實例,而Spring的singleton bean范圍僅指示容器在依賴項注入期間使用bean的單個實例,而bean可以是不受限制的任何類。
彈簧單例確保只要使用spring框架創建對象,就只能創建該對象的一個實例。 相反,實現單例模式可確保僅存在該對象的一個實例。
我已經看到了在彈簧配置中將對象定義為單例的代碼。 單例對象有時是使用spring DI創建的,有時是使用new運算符創建的。
因此,需要謹慎行事,以確保不進行此類濫用,並保持單一實例的單一實例。
在每個類加載器級別描述單例模式。 單例bean范圍是每個spring容器。
http://www.javabench.in/2012/04/difference-between-singleton-design.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.