Spring Bean 的作用域详解
创作时间:
作者:
@小白创作中心
Spring Bean 的作用域详解
引用
CSDN
1.
https://m.blog.csdn.net/qq_41840843/article/details/140387255
Spring Bean 的作用域详解
本文将详细介绍 Spring 支持的五种主要 Bean 作用域。
1. Singleton(单例模式)
定义:Singleton 是 Spring 容器中最常用的作用域,也是默认的作用域。在 Singleton 作用域下,Spring 容器中的每个 Bean 定义都对应着容器中的一个实例。无论请求多少次,容器都只会返回这个唯一的实例。
特点:
- 容器启动时创建实例。
- 容器关闭时销毁实例(如果配置了相应的销毁方法)。
- 适用于无状态或有状态但状态可以共享的服务对象,如数据库连接池等。
示例:
<bean id="myBean" class="com.example.MyBean" scope="singleton"/>
<!-- 或者省略 scope 属性,因为 singleton 是默认值 -->
<bean id="myBean" class="com.example.MyBean"/>
2. Prototype(多例模式)
定义:Prototype 作用域下的 Bean,每次通过 Spring 容器获取时都会创建一个新的实例。这意味着,同一个 Bean 定义可以有多个实例,且它们之间互不影响。
特点:
- 容器不会提前创建实例,而是在每次请求时创建。
- 实例的生命周期由调用者管理,容器不负责销毁。
- 适用于有状态且状态不可共享的服务对象,如用户会话信息等。
示例:
<bean id="myPrototypeBean" class="com.example.MyPrototypeBean" scope="prototype"/>
3. Request(请求作用域)
定义:Request 作用域仅在 Web 应用中有效,它确保每个 HTTP 请求都有自己独立的 Bean 实例。
特点:
- 适用于与 HTTP 请求相关的数据,如请求参数、用户信息等。
- 容器在请求开始时创建实例,请求结束时销毁实例(依赖于 Servlet 容器)。
示例(在 Spring MVC 中配置):
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public MyRequestBean myRequestBean() {
return new MyRequestBean();
}
注意:由于 XML 配置中直接设置 Request 作用域较为复杂,通常通过注解或 Java 配置方式在 Web 应用中使用。
4. Session(会话作用域)
定义:Session 作用域同样仅在 Web 应用中有效,它确保每个 HTTP Session 都有自己的 Bean 实例。
特点:
- 适用于需要跨多个请求保持状态的情况,如用户购物车等。
- 容器在 Session 开始时创建实例,Session 结束时销毁实例(依赖于 Servlet 容器)。
示例(通过注解配置):
@Bean
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public MySessionBean mySessionBean() {
return new MySessionBean();
}
5. GlobalSession(全局会话作用域)
定义:GlobalSession 作用域是特定于 Portlet 环境的,它类似于 Session 作用域,但用于 Portlet 应用的跨 Portlet 会话共享。在标准的 Servlet 环境中,GlobalSession 和 Session 是一样的。
特点:
- 主要用于 Portlet 环境中,确保跨 Portlet 会话的数据共享。
- 容器在全局会话开始时创建实例,全局会话结束时销毁实例。
示例(较少使用):
// 假设性示例,实际上在Servlet环境中不会这样使用
@Bean
@Scope(value = WebApplicationContext.SCOPE_GLOBAL_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public MyGlobalSessionBean myGlobalSessionBean() {
return new MyGlobalSessionBean();
}
// 注意:WebApplicationContext.SCOPE_GLOBAL_SESSION 并不是Spring标准API的一部分,
// 这里仅用于说明如何假设性地配置GlobalSession作用域(实际上应使用Portlet特定的API或配置方式)
热门推荐
每日物种故事 | 蜣螂:俗称屎壳郎
屎壳郎的生存智慧:从繁殖到生态贡献
奶酪焗松仁南瓜:秋季养生的创意营养菜
南瓜子:秋季养生佳品,富含维生素B1和E助你稳定情绪
打麻将老输?学学离卦教你的逆境心态调整法
从离卦看麻将心态:六条实用技巧助你提升胜率
盐酸氨溴索口服溶液:高效祛痰,适用肺炎支气管炎
盐酸氨溴索:粘痰溶解效果好,使用剂量和禁忌需谨记
“666”在欧洲竟然是“恶魔”的意思?揭秘“魔鬼之数666”的真相
70万年前“霍比特人”化石现身印尼,证实古人类最小体型
如何预防第二型糖尿病?两大重点、五种方法全解析
2024年医疗保健的新技术
香港企业家的创新与成长之路:从传统到现代的成功案例分析
长津湖战役:冰封决战中的英雄与牺牲,改变战争进程的艰辛历程
国产战争电影的打开方式
长津湖战役:美军陆战一师的"奇迹"与失败
酚醛环氧漆:工业设备防腐的利器
中国供应链展现强劲韧性,物流成本将降至13.5%
手机通信故障怎么办?5大类问题解决方案汇总
手机信号消失别慌张,6步教你轻松找到原因
对联与诗词:中华文化的双璧
春联创作大赛,赢取新年好礼!
14级台风“贝碧嘉”登陆上海,华东多地将现大暴雨
“贝碧嘉”成上海75年最强台风,江浙沪三地全力应对
洛杉矶山火致5死15万疏散,专家解析气候地形人为三大诱因
马斯克谈加州山火:气候变化之外,更需反思人为管理
办公室空调制热温度设多少最舒服?
冬季空调制热,这样调最舒服!
洛杉矶遭遇最严重山火,气候变化加剧火灾风险
高温干旱遇罕见强风,洛杉矶山火烧至最严重程度