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

來源:互聯網
上載者:User

         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的範圍化)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.