单例和原型 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