單例和原型 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"/>
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP