Spring中bean的作用域

本文详细介绍了Spring框架中Bean的不同作用域,包括单例、原型、会话和请求等,并解释了它们如何影响Bean的生命周期及如何在XML配置文件和注解中进行设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring中注入的bean默认被配置为单例模式,这意味着对于同一个类而言,其所有的被注入对象其实都是同一个对象,或许这的确节省了一些资源,但是对于对象中含有一些状态属性的情况,我们并不想要singleton。spring中提供了四种作用域

| 作用域 | 字符 | 描述 | | :--: | :-------: | :----------: | | 单例 | singleton | 整个应用中只创建一个实例 | | 原型 | prototype | 每次注入时都新建一个实例 | | 会话 | session | 为每个会话创建一个实例 | | 请求 | request | 为每个请求创建一个实例 |

在spring中将这些需要用到的字符声明成了常量方便使用

字符使用常量
singletonConfigurableBeanFactory.SCOPE_SINGLETON
prototypeConfigurableBeanFactory.SCOPE_PROTOTYPE
sessionWebApplicationContext.SCOPE_REQUEST
requestWebApplicationContext.SCOPE_SESSION

单例模式的对象会在spring应用上下文加载时被创建,其他作用域的对象则不然,比如请求作用域的对象只有在请求时才创建,所以假如在启动时一个单例对象中需要注入请求作用域的对象,但是此时请求作用域的对象并没有创建。spring会面临这样的问题,需要注入的某个对象还没有创建。此时spring会先注入一个代理对象,当这个对象被使用时,则委托给真正的bean去完成。

配置

在xml配置中配置,使用scope属性,类似于

<bean id="xxx" class="xxx.xxx.xxx" scope="session" >
	<aop:scoped-proxy/>
</bean>

<aop:scoped-proxy/>设置了代理

使用注解

@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.INTERFACES)

proxyMode的值等于ScopedProxyMode.INTERFACES,表示代理类要实现原来注入bean的接口。

转载于:https://my.oschina.net/idaren/blog/699466

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值