Spring 框架中需要 Bean 范围
Need for Bean scopes in Spring frameowrk
我读到 Spring 框架在声明它们时有几种类型的 bean 作用域。但是,我不明白为什么我们需要几种类型。任何人都可以用一些例子解释在 Spring 应用程序中使用 Bean 作用域的必要性吗?
提前致谢!
Spring Inversion of Control Container (Ioc container) 在 Spring Application.With 中创建和管理 beans 每个声明的 Spring Bean,我们可以提供指定的元数据应该创建特定 bean 的实例数以及它们应该存在多长时间,即 bean 的生命周期。
基本上,使用普通 Java 我们自己创建对象。我们创建对象的位置决定了它的生命周期,例如在方法中创建的对象在方法返回后立即被销毁。但是在 Spring 的情况下,v 为我们创建 bean 并管理 bean 的生命周期 Spring 使用 bean 的范围。它还为开发人员提供了覆盖默认范围 "Singleton" 的灵活性。
现在为什么我们需要几种类型?
很简单,因为每个 bean 都可以有自己的生命周期。根据生命周期,它的范围定义如下
单例(默认) 将单个 bean 定义的范围限定为每个 Spring IoC 容器的单个对象实例。
prototype 将单个 bean 定义的范围限定为任意数量的对象实例。
request 将单个 bean 定义范围限定为单个 HTTP 请求的生命周期;也就是说,每个 HTTP 请求都有自己的 bean 实例,该实例是在单个 bean 定义的基础上创建的。仅在网络感知的上下文中有效 Spring ApplicationContext。
session 将单个 bean 定义的范围限定为 HTTP 会话的生命周期。仅在网络感知的上下文中有效 Spring ApplicationContext。
application 将单个 bean 定义的范围限定为 ServletContext 的生命周期。仅在网络感知的上下文中有效 Spring ApplicationContext。
websocket 将单个 bean 定义的范围限定为 WebSocket 的生命周期。仅在网络感知的上下文中有效 Spring ApplicationContext。
例如:
Singleton : 控制器、服务、存储库等对象只需要在应用程序中存在一个实例。
Prototype : 像 Student, Product 这样的对象可能需要在你每次想创建新资源时创建。
其余的是 WebAware 范围和自我解释。
我读到 Spring 框架在声明它们时有几种类型的 bean 作用域。但是,我不明白为什么我们需要几种类型。任何人都可以用一些例子解释在 Spring 应用程序中使用 Bean 作用域的必要性吗?
提前致谢!
Spring Inversion of Control Container (Ioc container) 在 Spring Application.With 中创建和管理 beans 每个声明的 Spring Bean,我们可以提供指定的元数据应该创建特定 bean 的实例数以及它们应该存在多长时间,即 bean 的生命周期。
基本上,使用普通 Java 我们自己创建对象。我们创建对象的位置决定了它的生命周期,例如在方法中创建的对象在方法返回后立即被销毁。但是在 Spring 的情况下,v 为我们创建 bean 并管理 bean 的生命周期 Spring 使用 bean 的范围。它还为开发人员提供了覆盖默认范围 "Singleton" 的灵活性。
现在为什么我们需要几种类型?
很简单,因为每个 bean 都可以有自己的生命周期。根据生命周期,它的范围定义如下
单例(默认) 将单个 bean 定义的范围限定为每个 Spring IoC 容器的单个对象实例。
prototype 将单个 bean 定义的范围限定为任意数量的对象实例。
request 将单个 bean 定义范围限定为单个 HTTP 请求的生命周期;也就是说,每个 HTTP 请求都有自己的 bean 实例,该实例是在单个 bean 定义的基础上创建的。仅在网络感知的上下文中有效 Spring ApplicationContext。
session 将单个 bean 定义的范围限定为 HTTP 会话的生命周期。仅在网络感知的上下文中有效 Spring ApplicationContext。
application 将单个 bean 定义的范围限定为 ServletContext 的生命周期。仅在网络感知的上下文中有效 Spring ApplicationContext。
websocket 将单个 bean 定义的范围限定为 WebSocket 的生命周期。仅在网络感知的上下文中有效 Spring ApplicationContext。
例如:
Singleton : 控制器、服务、存储库等对象只需要在应用程序中存在一个实例。
Prototype : 像 Student, Product 这样的对象可能需要在你每次想创建新资源时创建。
其余的是 WebAware 范围和自我解释。