爲什麼要用singleton


原文地址       爲什麼要用singleton


scope="prototype"沒寫的問題,項目中對一個表的增刪該操作是用一個action,這個action有add,update,delete,save這些方法, 添加和修改是共用一個頁面,當頁面得到id時代表進行的修改操作,反之是添加操作。因爲在配置spring的bean是忘了寫scope="prototype", 所以每次添加時都顯示最後一次訪問過的記錄, scope = "prototype" 會在該類型的對象被請求時創建一個新的action對象。如果沒有配置scope=prototype則添加的時候不會新建一個action,他任然會保留上次訪問的過記錄的信息。


       webwork的Action不是線程安全的,要求在多線程環境下必須是一個線程對應一個獨立的實例,不能使用singleton。所以,我們在Spring配置Webwork Action Bean時,需要加上屬性scope=”prototype”或singleton=”false”。


       singleton模式指的是對某個對象的完全共享,包括代碼空間和數據空間,說白了,如果一個類是singleton的,假如這個類有成員變量,那麼這個成員變量的值是各個線程共享的(有點類似於static的樣子了),當線程A往給變量賦了一個值以後,線程B就能讀出這個值。因此,對於前臺Action,肯定不能使用singleton的模式,必須是一個線程請求對應一個獨立的實例。推而廣之,只要是帶數據成員變量的類,爲了防止多個線程混用數據,就不能使用singleton。對於我們用到的Service、Dao,之所以用了singleton,就是因爲他們沒有用到數據成員變量,如果誰的Service需要數據成員變量,請設置singleton=false。


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