單例和原型 Bean 作用域之間的區別。


Spring 框架支援五種型別的 Bean 作用域 -

  • 單例

  • 原型

  • 請求

  • 會話

  • 全域性會話

根據 Spring 文件 -

單例 - 它為每個 Spring IoC 容器返回一個 Bean 例項。此單個例項儲存在這些單例 Bean 的快取中,並且對該命名 Bean 的所有後續請求和引用都返回快取的物件。

Spring 單例與 Java 單例不同。在 Java 中,每個 JVM 建立一個 Bean 例項,而在 Spring 中,每個應用程式上下文建立一個 Bean 例項。

原型 -

根據 Spring 文件 -

Spring 不管理原型 Bean 的完整生命週期:容器例項化、配置以及組裝原型物件,並將其傳遞給客戶端,而不會進一步記錄該原型例項。因此,儘管在所有物件上都會呼叫初始化生命週期回撥方法,而不管作用域如何,但在原型的情況下,不會呼叫配置的銷燬生命週期回撥。客戶端程式碼必須清理原型作用域的物件並釋放原型 Bean 持有的昂貴資源。

序號單例 Bean 作用域原型 Bean 作用域
1
例項數
它為每個 Spring IoC 容器返回一個 Bean 例項。此單個例項儲存在這些單例 Bean 的快取中,並且對該命名 Bean 的所有後續請求和引用都返回快取的物件
每次注入/查詢時都會建立一個新物件。它每次都會使用 new X()
2
範圍
在 Spring 中,Bean 的預設作用域是單例
它不是 Spring 中 Bean 的預設作用域
3
Bean 建立
它是在應用程式上下文初始化期間建立的
它是在每次呼叫時建立的。
4
狀態/無狀態
它用於所有無狀態的 Bean
它用於本質上是有狀態的 Bean

單例和原型的示例

<bean id="xyzService" class="com.xyz.XyzService" scope="singleton"/>

<bean id="xyzService" class="com.xyz.XyzService" scope="prototype"/>

更新於: 2020-09-09

3K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.