【发布时间】:2020-04-03 14:42:35
【问题描述】:
在声明它们时,我已经阅读了 Spring 框架中有几种类型的 bean 作用域。但是,我不明白为什么我们需要几种类型。谁能通过一些示例来解释在 Spring 应用程序中拥有 Bean 范围的需求是什么?
提前感谢您!
【问题讨论】:
在声明它们时,我已经阅读了 Spring 框架中有几种类型的 bean 作用域。但是,我不明白为什么我们需要几种类型。谁能通过一些示例来解释在 Spring 应用程序中拥有 Bean 范围的需求是什么?
提前感谢您!
【问题讨论】:
Spring Inversion of Control Container(Ioc 容器)在 Spring 应用程序中创建和管理 bean。通过每个声明的 Spring Bean,我们可以提供元数据,指定应该创建的特定 bean 实例的数量以及它们应该存在多长时间即 bean 的寿命。
基本上使用纯 Java,我们自己创建对象。我们创建对象的位置决定了它的生命周期,例如在方法中创建的对象在方法返回后立即被销毁。但是在 Spring 的情况下,v 为我们创建 bean 并管理 bean 的生命周期 Spring 使用 bean 的范围。它还为开发人员提供了覆盖默认范围“Singleton”的灵活性。
现在为什么我们需要几种类型?
仅仅是因为每个 bean 都可以有自己的生命周期。根据生命周期,它的范围定义如下
单例(默认)将单个 bean 定义限定为每个 Spring IoC 容器的单个对象实例。
prototype 将单个 bean 定义限定为任意数量的对象实例。
request 将单个 bean 定义限定为单个 HTTP 请求的生命周期;也就是说,每个 HTTP 请求都有自己的 bean 实例,该实例是在单个 bean 定义的后面创建的。仅在 Web 感知 Spring ApplicationContext 的上下文中有效。
session 将单个 bean 定义限定为 HTTP 会话的生命周期。仅在 Web 感知 Spring ApplicationContext 的上下文中有效。
应用程序 将单个 bean 定义限定为 ServletContext 的生命周期。仅在 Web 感知 Spring ApplicationContext 的上下文中有效。
websocket 将单个 bean 定义限定为 WebSocket 的生命周期。仅在 Web 感知 Spring ApplicationContext 的上下文中有效。
例如:
单例:控制器、服务、存储库等对象只需要一个实例就可以存在于应用程序中。
原型:像 Student、Product 这样的对象,可能需要在您每次想要创建新资源时创建。
剩下的是 WebAware 范围和自我解释。
【讨论】: