Spring自動注入單例和多例如何選擇

2021-09-28 10:58:43 字數 608 閱讀 8054

spring中bean的scope屬性,有如下5種型別:

singleton 表示在spring容器中的單例,通過spring容器獲得該bean時總是返回唯一的例項

prototype表示每次獲得bean都會生成乙個新的物件

request表示在一次http請求內有效(只適用於web應用)

session表示在乙個使用者會話內有效(只適用於web應用)

globalsession表示在全域性會話內有效(只適用於web應用)

在多數情況,我們只會使用singleton和prototype兩種scope,如果在spring配置檔案內未指定scope屬性,預設為singleton。所謂單例就是所有的請求都用乙個物件來處理,比如我們常用的service和dao層的物件通常都是單例的,而多例則指每個請求用乙個新的物件來處理

之所以用單例,是因為沒必要每個請求都新建乙個物件,這樣子既浪費cpu又浪費記憶體; 之所以用多例,是為了防止併發問題;即乙個請求改變了物件的狀態,此時物件又處理另乙個請求,而之前請求對物件狀態的改變導致了物件對另乙個請求做了錯誤的處理;用單例和多例的標準只有乙個: 當物件含有可改變的狀態時(更精確的說就是在實際應用中該狀態會改變),則多例,否則單例;

reference

spring 單例與多例

id student class com.ly.entity.student init method init destroy method destroy scope singleton bean scope prototype 為多例 預設單例模式 singleton 單例模式 框架啟動時,就例...

Spring 單例模式和多例模式

singleton 單例 只有乙個共享的例項存在,所有對這個bean的請求都會返回這個唯一的例項。prototype 多例 對這個bean的每次請求都會建立乙個新的bean例項,類似於new。spring bean 預設是單例模式。單例測試 測試類user user1 user context.ge...

Spring單例模式和多例模式

預設情況下scope singleton 那麼該bean是單例,任何人獲取該bean例項的都為同乙個例項 scope prototype 任何乙個例項都是新的例項 scope request 在web應用程式中,每乙個例項的作用域都為request範圍 scope session 在web應用程式中...