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。