日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Bean Scope 有状态的Bean 无状态的Bean

發布時間:2023/12/10 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Bean Scope 有状态的Bean 无状态的Bean 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

[xhtml] view plaincopy
  • <bean?id="testManager"?class="com.sw.TestManagerImpl"?scope="singleton"?/>??
  • ??
  • ?<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
  • package?com.sw;??
  • ??
  • public?class?TestManagerImpl?implements?TestManager{??
  • ????private?User?user;????
  • ??
  • ????public?void?deleteUser(User?e)?throws?Exception?{??
  • ????????user?=?e?;???????????//1??
  • ????????prepareData(e);??
  • ????}??
  • ??
  • ????public?void?prepareData(User?e)?throws?Exception?{??
  • ????????user?=?getUserByID(e.getId());????????????//2??
  • ????????.....??
  • ????????//使用user.getId();???????????????????????//3??
  • ????????.....??
  • ????????.....??
  • ????}?????
  • }??
  • ?

    ?

    如果該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

    總結

    以上是生活随笔為你收集整理的Spring Bean Scope 有状态的Bean 无状态的Bean的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。