Spring Bean 的作用域(Bean Scope)

摘自:Spring Bean 的作用域(Bean Scope) - god23bin - 博客园

前言

大家好,我是 god23bin,今天我们来聊一聊 Spring 框架中的 Bean 作用域(Scope)。

什么是 Bean 的作用域?

我们在以 XML 作为配置元数据的情况下,进行 Bean 的定义,是这样的:

<bean id="vehicle" class="cn.god23bin.demo.domain.model.Vehicle">
	<!-- 协作者写在这里... -->
</bean>

我们写了一个 Bean 定义(Bean Definition),就是用于创建所定义的类的实例的。

一个 Bean 定义,我们可以类比一个类的定义,你定义了一个类,你可以根据这个类创建出许多实例对象。同理,Bean 定义也是,也是可以根据这个定义创建许多实例对象的,只不过这里是 Spring 帮我们创建,而不是我们手动 new 。 这些 Bean 对象实例,我们可以理解为 Spring IoC 容器中的对象。

在写 Bean 定义的过程中,我们可以控制各种 Bean 的依赖项和相应的值,将这些依赖项和值注入到 Bean 定义所创建的对象中。同理,这个过程也可以控制 Bean 定义创建的对象的 Scope(作用域)。Bean 的作用域定义了在容器中创建的 Bean 实例的生命周期以及在应用程序中的可见性。

6 种 Bean 的作用域

Spring 支持 6 种 Bean 的作用域,其中有 4 种是在 Web 应用下才能感知到的,如下表所示:

Scope 说明
singleton (默认情况下)每个 Spring IoC 容器将单个 Bean 定义的 Scope 指定为单个对象实例。
prototype 将单个 Bean 定义的 Scope 扩大到任意数量的对象实例。
request 将单个 Bean 定义的 Scope 扩大到单个 HTTP 请求的生命周期。也就是说,每个 HTTP 请求都有自己的 Bean 实例,该实例是在单个 Bean 定义的基础上创建的。只在 Web 感知的 Spring ApplicationContext 的上下文中有效。
session 将单个 Bean 定义的 Scope 扩大到一个 HTTP 会话的生命周期。只在 Web 感知的 Spring ApplicationContext 的上下文中有效。
application 将单个 Bean 定义的 Scope 扩大到 ServletContext 的生命周期中。只在 Web 感知的 Spring ApplicationContext 的上下文中有效。
websocket 将单个 Bean 定义的 Scope 扩大到 WebSocket 的生命周期。只在 Web 感知的 Spring ApplicationContext 的上下文中有效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广东数字化转型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值