1. 程式人生 > >spring 的singleton 和prototype的區別和應用場合

spring 的singleton 和prototype的區別和應用場合

singleton作用域:當把一個Bean定義設定為singleton作用域是,Spring IoC容器中只會存在一個共享的Bean例項,並且所有對Bean的請求,只要id與該Bean定義相匹配,則只會返回該Bean的同一例項。值得強調的是singleton作用域是Spring中的預設作用域。
prototype作用域:prototype作用域的Bean會導致在每次對該Bean請求(將其注入到另一個Bean中,或者以程式的方式呼叫容器的getBean()方法)時都會建立一個新的Bean例項。根據經驗,對有狀態的Bean應使用prototype作用域,而對無狀態的Bean則應該使用singleton作用域。對於具有prototype作用域的Bean,有一點很重要,即Spring不能對該Bean的整個生命週期負責。具有prototype作用域的Bean建立後交由呼叫者負責銷燬物件回收資源。簡單的說:
singleton 只有一個例項,也即是單例模式。
prototype訪問一次建立一個例項,相當於new。 
他們的應用場合:
1.需要回收重要資源(資料庫連線等)的事宜配置為singleton,如果配置為prototype需要應用確保資源正常回收。
2.有狀態的Bean配置成singleton會引發未知問題,可以考慮配置為prototype。