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