Spring Bean Scope 有狀態的Bean 無狀態的Bean

?在Spring的Bean配置中,存在這樣兩種情況:

[xhtml] view plaincopy
  1. <bean?id="testManager"?class="com.sw.TestManagerImpl"?scope="singleton"?/>??
  2. ??
  3. ?<bean?id="testManager"?class="com.sw.TestManagerImpl"?scope="prototype"?/>??

?

當然,scope的值不止這兩種,還包括了request,session 等。但用的最多的還是singleton單態,prototype多態。

singleton表示該bean全局只有一個實例,Spring中bean的scope默認也是singleton.

prototype表示該bean在每次被注入的時候,都要重新創建一個實例,這種情況適用于有狀態的Bean.

對于SSH架構的系統,很少關心這方面,因為我們用到的一般都是singleton. Bean的注入由Spring管理。

對于有狀態的Bean呢?

下面是一個有狀態的Bean

?

[java] view plaincopy
  1. package?com.sw;??
  2. ??
  3. public?class?TestManagerImpl?implements?TestManager{??
  4. ????private?User?user;????
  5. ??
  6. ????public?void?deleteUser(User?e)?throws?Exception?{??
  7. ????????user?=?e?;???????????//1??
  8. ????????prepareData(e);??
  9. ????}??
  10. ??
  11. ????public?void?prepareData(User?e)?throws?Exception?{??
  12. ????????user?=?getUserByID(e.getId());????????????//2??
  13. ????????.....??
  14. ????????//使用user.getId();???????????????????????//3??
  15. ????????.....??
  16. ????????.....??
  17. ????}?????
  18. }??

?

?

如果該Bean配置為singleton,會出現什么樣的狀況呢?

如果有2個用戶訪問,都調用到了該Bean.

假定為user1,user2

當user1 調用到程序中的1步驟的時候,該Bean的私有變量user被付值為user1

當user1的程序走到2步驟的時候,該Bean的私有變量user被重新付值為user1_create

理想的狀況,當user1走到3步驟的時候,私有變量user應該為user1_create;

但如果在user1調用到3步驟之前,user2開始運行到了1步驟了,由于單態的資源共享,則私有變量user被修改為user2

這種情況下,user1的步驟3用到的user.getId()實際用到是user2的對象。

?

而如果是prototype的話,就不會出現資源共享的問題。

對于SSH來說,Bean的配置是沒錯的,配置為singleton ;實際應該是這個例子不應該用私有變量。這樣就使得這個Bean

由無狀態變成了有狀態Bean.還是應該盡量使用無狀態Bean.如果在程序中出現私有變量,盡量替換為參數。
對于每個訪問私有變量的方法增加變量傳入或者通過ThreadLocal來獲取也是不錯的方法。

?

真正出現上面代碼問題的也是少數,出現的時候,一般是為了圖方便,一個很多方法都要用到的變量,如果都需要用參數的

方式傳遞多麻煩呀,這樣私有變量多好,不用參數那樣丑陋。但是丑陋并不代表不好,以對的,自己習慣的方式編程,才能

盡量避免問題的發生。

轉載于:https://www.cnblogs.com/happyday56/p/5566945.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271665.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271665.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271665.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構基礎:圖結構的學習筆記

1、圖的定義圖是比樹更加復雜的數據結構&#xff0c;在圖的結構當中&#xff0c;任意兩個節點之間都有可能有直接關系&#xff0c;所以圖中一個節點的前驅和后繼的數目是沒有限制的。2、圖的用途用于描述各種復雜的數據對象&#xff0c;在自然科學、社會科學和人文科學等很多領…

企業網站 源碼 服務郵箱:_企業網站建設對于服務器的選擇至關重要

網站建設是離不開租用服務器的&#xff0c;這是目前大多數企業都在做的。但有些企業由于對網站服務器的租用技巧及經驗的缺乏&#xff0c;經常會導致網站在運營過程中出現非常多的問題&#xff0c;嚴重影響了企業業務的正常開展。石家莊網站建設方面的人才來說明幾點不容忽視的…

linux sli 提高效率,從原理到性能提升 MCP78智能SLI全解析

NVIDIA正式發布了“Hbrid SLI”技術在昨日的2008 CES上&#xff0c;NVIDIA正式向外界發布了“Hbrid SLI”技術&#xff0c;即我們所俗稱的混合SLI&#xff0c;而NVIDIA在發布時已更正式名為“智能SLI技術”。雖然這僅僅是NVIDIA在此次消費電子展上的宣講主題之一&#xff0c;但…

git操作代碼文件的顏色變化

1.若文件顯示紅色&#xff0c;表示文件未add到git進行管理 2.若文件顯示綠色&#xff0c;表示文件已經交給git管理&#xff0c;但從未上傳到遠程倉庫中 3.若文件顯示藍色&#xff0c;表示文件已經上傳過遠程倉庫&#xff0c;且此時本地文件與遠程倉庫文件不一致 4.若文件顯示…

[GitHub]第三講:簡單分支操作

Git 最核心的操作對象是版本&#xff08; commit &#xff09;&#xff0c;最核心的操作技巧就是分支。 什么是分支&#xff1f; 倉庫創建后&#xff0c;一旦有了新 commit&#xff0c;默認就會放到一個分支上&#xff0c;名字叫 master。前面咱們一直看到的多個版本組成的一條…

算法基礎:常用的排序算法知識筆記

1、算法外排序分類2、冒泡排序冒泡排序&#xff08;Bubble Sort&#xff09;屬于交換排序&#xff0c;它的原理是&#xff1a;循環兩兩比較相鄰的記錄&#xff0c;如果反序則交換&#xff0c;直到沒有反序的記錄為止。實現算法&#xff1a;/*** 冒泡排序優化后的算法* 設置一個…

302狀態碼_http狀態碼是什么?301 302 404的SEO應用場景

什么是HTTP狀態碼&#xff1f;簡單的講&#xff0c;就是用以表示網頁服務器HTTP響應狀態的3位數字代碼。其中1xx表示臨時響應&#xff0c;2xx表示成功處理了請求&#xff0c;3xx代表重定向&#xff0c;4xx表示請求錯誤&#xff0c;而5xx表示服務器錯誤。除了網頁正常返回200之外…

Android高版本開機廣播,android3.1以上,假如程序沒有啟動過,怎么獲取開機廣播呢?...

官方說不支持&#xff1a;Launch controlson stopped applicationsStarting from Android 3.1, the systems package manager keepstrack of applications that are in a stopped state and provides ameans of controlling their launch from background processes andother a…

git push前請先git pull

開發過程中 如果要推送代碼到遠程倉庫&#xff0c;請先git pull。養成好習慣。 原因很簡單&#xff0c;在你開發過程中&#xff0c;你的同事可能也在改代碼然后他提交了沒通知你&#xff0c;你直接git push很容易造成代碼沖突&#xff0c;代碼沖突解決也簡單&#xff0c;可萬一…

table 中 thead tbody tfoot 加載順序問題

這幾個標記主要是用于提高table標簽的加載以及顯示的&#xff0c;說白了&#xff0c;就是分布加載。在傳統的瀏覽器&#xff0c;在加載 時&#xff0c;是當所有的標簽中元素都被下載后才會顯示&#xff0c;當然這樣的用戶體驗是不好的。再加入了這幾個t打頭的標簽后&#xff0c…

算法基礎:常用的查找算法知識筆記

1、查找表和查找效率的概念查找表是指由同一類型的數據元素構成的集合。分為靜態查找表和動態查找表。1.1 靜態查找表1、查詢某個特定元素是否在查找表的集合當中2、查詢某個特定元素的各種屬性1.2 動態查找表1、在查找表中插入一個數據元素2、在查找表中刪除一個元素1.3 關鍵字…

注解參數怎么使用變量_硅橡膠膠水有哪些特點?使用參數表現的怎么樣?如何儲存?...

作為單組分產品&#xff0c;硅橡膠膠水的使用方法簡單又靈活。直接涂抹在粘接基面上&#xff0c;固化之后即可抵抗外界的壓力與沖擊。別看它的規格不是很打&#xff0c;卻可以順順利利完成粘接&#xff0c;形成保護膜。硅橡膠膠水有哪些特點?沒有固化之前&#xff0c;是半透明…

android 谷歌郵箱,Android 使用 SMTP 發送郵件 (Gmail)

具體使用方法請看&#xff1a;http://www.oschina.net/code/snippet_12_9831.[代碼]GMailSender.javapackage org.apache.android.mail;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.mail.Message;import javax.mail.PasswordAuthent…

Java中return的兩種用法

一、return語句總是用在方法中&#xff0c;有兩個作用。 一個是返回方法指定類型的值&#xff08;這個值總是確定的&#xff09;。 一個是結束方法的執行&#xff08;僅僅一個return語句&#xff09;。 一般的就百是用在有反回值的方法中&#xff0c;用來返回方度法指定問類…

Alpha版總結會議

一、會議過程 我們于第十五周周一開始在學院樓針對前一段時間開發過程中的問題進行了討論。會議期間我們整合并回顧了一下兩次沖刺周期的成果。會議開始首先每個人都先發表了自己針對Alpha版開發過程中存在的疑惑和一些問題的看法。我們最后挑選出出三個最具針對性的問題進行了…

算法基礎:遞歸算法知識筆記

1、遞歸算法定義遞歸算法是將重復問題分解為同類的子問題而解決問題的方法&#xff0c;其核心思想是分治策略。簡單來說就是自己調用自己。直到達到退出遞歸的條件&#xff0c;則完成遞歸。2、遞歸的步驟1、找整個遞歸的終止條件&#xff1a;遞歸應該在什么時候結束&#xff1f…

ttl繼承邏輯門的邏輯功能與參數測試 實驗總結_LMS電聲測試儀,LMS-V測試系統,精聲電聲...

LMS-V測試系統LMS揚聲器測試儀從推出到現在25年的時間&#xff0c;在全世界被很多揚聲器開發與制造廠家廣泛應用研發與生產質量控制&#xff0c;傳統的LMS揚聲器測試儀采用ISA卡的形式提供&#xff0c;所以面臨著越來越多的零件過時&#xff0c;所以為了徹底解決這些問題&#…

android自動讓輸入框上劃,Android界面技巧:當輸入法調出時,如何讓界面自動上移,使輸入法不會遮擋到主界面(Activity)...

android:windowSoftInputModeactivity主窗口與軟鍵盤的交互模式&#xff0c;可以用來避免輸入法面板遮擋問題&#xff0c;Android1.5后的一個新特性。這個屬性能影響兩件事情&#xff1a;【一】當有焦點產生時&#xff0c;軟鍵盤是隱藏還是顯示【二】是否減少活動主窗口大小以便…

java中break標記的使用

筆試題目&#xff1a;break目前位于內層的for循環&#xff0c;如何才能讓break作用于外層 的for循環。可以標記解決 標記的命名只要符合標識符的命名規則即可。 Test public void test2(){aaa:for(int j 0 ; j<3 ; j){ // j0 外層for循環for(int i 0 ; i< 2 ; i){ //…

六月計劃#2B(6.10-6.16)

4/7 STL set 數學 快速傅立葉(FFT)高斯消元動態規劃 斜率優化轉載于:https://www.cnblogs.com/Sunnie69/p/5573299.html