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 -手动调用

相关推荐
个 人 练 习 生1 分钟前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
guslegend6 分钟前
脚手架原理与本地调试:从 bin 软链接到 npm link
前端·npm·node.js·脚手架·前端工程化
2601_9669496510 分钟前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
坤坤子吖13 分钟前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
奋斗的阿狸_198623 分钟前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
夜之眷属37 分钟前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
weixin1997010801638 分钟前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
海码事务所39 分钟前
Google Play 新个人开发者账号上架指南:12 人连续 14 天封闭测试怎么做?
前端
波加曼大王40 分钟前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
田威AI43 分钟前
图片内文字翻译的规格:输入输出、保真、自动化、时间与费用
前端·计算机视觉