Spring Bean作用域与生命周期全解析

一.Bean的作用域

在SpringIoC中类注解(@Component,@Controller,@Servie,@Repository,@Configuration)

方法注解(@Bean)都是用来声明Bean对象

通过@Autowired , 构造方法,Setter方法来获取注入Spring并由Spring管理的Bean对象

通过 ApplicationContext 或者 BeanFactory 来获取对象

默认情况下, Spring容器中的bean是单例的

作用域 描述 特点 适用场景
singleton 单例作用域 每个 Spring 容器只创建一个共享实例(默认) 所有请求返回同一个实例;容器管理生命周期 无状态服务类、DAO、控制器
prototype 原型作用域 每次请求(注入或 getBean)都创建新实例 容器只负责创建和组装依赖,不管理销毁 有状态的 Bean、临时 Helper 类
request 请求作用域 每个 HTTP 请求创建一个新实例(仅 Web 应用) 实例在当前请求内有效,请求结束销毁 请求上下文数据、表单对象
session 会话作用域 每个 HTTP Session 共享一个实例(仅 Web 应用) 实例在整个用户会话期间有效,会话结束销毁 购物车、用户登录信息
application 全局作用域 每个 ServletContext 生命周期创建一个实例 类似于单例,但作用域是整个 Web 应用上下文 跨多个 Servlet/Controller 的全局数据
websocket HTTPWebSocket 作用域 每个 WebSocket 会话创建一个实例(仅 Web 应用) 实例与 WebSocket 会话绑定,长连接期间有效 WebSocket 会话状态管理

可以通过@Scope来设置,

singleton和prototype是给@Scope里面传入ConfigurableBeanFactory然后调用方法

java 复制代码
String SCOPE_SINGLETON = "singleton";
String SCOPE_PROTOTYPE = "prototype";

request使用@RequestScope, session使用@SessionScope, application使用@ApplicationScope

二.Bean的生命周期

1.实例化

为Bean分配内存空间

2.属性赋值

Bean注入和装配, 如 @AutoWired

3.初始化

@PostConstruct

1.执行各种通知

2.执行初始化的前置方法

3.执行初始化方法

4.执行初始化的后置方法

4.使用Bean

5.销毁Bean

@PreDestroy-Spring 自动调用,@DisposableBean -手动调用

相关推荐
Chester_19992 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
FreeTinker2 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396232 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端
EXI-小洲3 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
wangruofeng3 小时前
Phosphor Icons 官网源码拆解:URL 即存储、水波动画与 7362 Star 图标库的架构实践
前端·架构·github
BigTopOne4 小时前
WebRTC Native / Android 开发学习资源整理
前端
会周易的程序员4 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导4 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan4 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
m0_695251494 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt