Spring bean的單利模式和非單利模式

         Spring Bean默認情況下所有bean是單一的,即單利模式。代碼中表示:<bean id=“myBean” class="。。。" scope="singleton"/>。singleton表示spring容器中只會創建一個叫做myBean的Bean對象。所有的對該bean的請求都由該對象來處理,這個bean對象就是共享的,就是說這個bean是非線程安全的。既然如此那我們的三層框架的service和dao層中由容器注入的bean不都是非線程安全的嗎?這樣不是會出問題嗎?答案是那些bean中沒有使用全局變量,也就是說沒有共享的數據,所以我們可以不用去管它。若是有了共享數據,那爲了線程安全,我們可以設置singleton=“false”來保證其安全性。

        什麼時候我們會經常使用非單利的bean呢?是在將action交給spring管理的時候,容器生成的action的bean就是非單利的。在struts.xml(Struts2)中配置如下:<constant name="struts.objectFactory" value="spring" />(Struts1不知道如何配置)。由容器管理action的bean還需要一個配置,那就是scope=“prototype”。這樣的話,這樣的話頁面每次請求一個action的bean就會產生一個新的對象來處理用戶的請求。這樣就保證了其線程安全性。

 

對於以上問題,也可以參考如下三個解釋:

1,http://www.juziku.com/zhouchao/wiki/4036.htm,

2,http://blog.csdn.net/mastermind/article/details/1932787

3,《Spring in Action 中文版 第二版》第二章的2.5小節:控制bean的初始化(2.5.1 Bean的範圍化)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章