当前位置: 首页 > news >正文

Spring Bean 作用域与生命周期

一、Spring Bean 作用域Bean 作用域用于控制 Bean 实例的创建规则、数量及存活范围Spring 官方提供 5 种核心作用域默认作用域为singleton单例。1. singleton单例默认整个 Spring IoC 容器中仅会创建一个 Bean 实例全局所有调用、注入场景都会复用该实例Bean 的创建与销毁均由 Spring 容器统一管理。核心注意点单例 Bean非线程安全多线程并发场景下禁止在 Bean 中定义成员变量存储业务数据避免数据错乱问题。适用场景无状态业务 Bean如 Service、Dao、工具类、配置类等。2. prototype原型每次通过容器获取 Bean、依赖注入 Bean 时都会创建一个全新的实例。与单例模式最大的区别是Spring 容器只负责创建原型 Bean不管理其销毁资源释放需要开发者手动处理。适用场景有状态、需要独立实例的业务场景多线程专属 Bean。3. request请求作用域仅适用于 Web 开发环境。每一次 HTTP 请求都会创建一个全新的 Bean请求处理结束后该 Bean 会自动销毁。4. session会话作用域仅适用于 Web 开发环境。对应单个用户的浏览器会话同一个用户的多次请求共享一个 Bean当用户会话超时、主动退出或关闭页面时Bean 随之销毁。适用场景存储用户登录信息、临时购物车数据等用户专属数据。5. application应用作用域仅适用于 Web 开发环境。整个 Web 应用生命周期内只存在一个 Bean作用域范围等同于 ServletContext项目启动创建、项目关闭销毁属于全局共享 Bean。二、Spring Bean 完整生命周期Spring Bean 的生命周期是指 Bean 从创建、初始化、投入使用到最终销毁的完整流程核心可概括为五大核心阶段初始化和销毁阶段有固定的方法执行优先级是面试核心考点。1. 实例化Spring 容器扫描到 Bean 定义后通过反射调用 Bean 的构造方法在堆内存中创建空对象此时对象仅完成初始化尚未赋值、无依赖关系。2. 属性注入依赖填充容器自动完成依赖装配通过 Autowired、Value 或配置文件为实例化后的 Bean 填充属性、注入依赖对象建立 Bean 之间的关联关系。3. 初始化固定执行顺序属性赋值完成后执行 Bean 的初始化方法优先级从高到低固定如下PostConstruct 注解方法InitializingBean 接口 afterPropertiesSet() 方法自定义 init-method 初始化方法4. 运行使用阶段初始化完成的 Bean 存入 Spring 容器缓存正式对外提供服务响应业务调用、处理业务逻辑。5. 销毁容器关闭时执行当 Spring 容器关闭、项目停止时执行 Bean 的销毁方法优先级从高到低固定如下PreDestroy 注解方法DisposableBean 接口 destroy() 方法自定义 destroy-method 销毁方法三、面试极简口述总结作用域Spring Bean 默认是 singleton 单例容器全局唯一、统一管理生命周期prototype 每次获取都会新建实例容器不负责销毁request、session、application 仅在 Web 环境生效分别对应单次请求、单个用户会话、全局应用。同时单例 Bean 存在线程安全问题不建议存储可变成员变量。生命周期整体流程为 实例化 → 属性注入 → 初始化 → 运行使用 → 销毁。初始化优先级注解 接口 自定义方法销毁优先级同样遵循注解优先、接口次之、自定义方法最后的规则。四、核心面试易错点Spring 单例是容器级单例并非 JVM 全局单例prototype 原型 Bean 容器不管理销毁需手动释放资源初始化、销毁方法执行顺序固定是面试高频提问点单例 Bean 严禁定义可变成员变量避免并发数据问题。
http://www.rkmt.cn/news/1408959.html

相关文章:

  • 从提示词工程、上下文工程到 Harness 工程:AI Agent 工程化演进路径
  • 智能驾驶的“眼睛”:一文读懂交通标志识别的技术与未来
  • 别再死记硬背了!用Python+SymPy实战拉格朗日乘子法,5分钟搞定SVM里的优化问题
  • 别再只盯着%util了!用iostat -xh 1 3 看懂Linux磁盘性能的5个关键指标
  • B2B产品陈旧感:识别、影响与系统性对抗策略
  • Keil C51评估版兼容性问题解析与NXP 87C752开发指南
  • ARM处理器调试架构:EDBGRQ与CTI对比与实现
  • AI Agent Harness Engineering 在科研文献分析中的实战:自动综述生成与引用溯源
  • 一台手机想过 GMS 认证有多难?CTS、GTS、VTS 全流程实战指南(附踩坑血泪史)
  • OpenMV H7 Plus实战:从单色巡线到多数字识别的全流程算法解析
  • Crimson字体如何为你的设计项目注入古典优雅与专业质感?
  • Rust Web框架Axum实战:构建高性能HTTP服务
  • Python微服务架构设计:构建可扩展的分布式系统
  • 2026年 宝钢冷镦钢盘条/圆钢全牌号推荐榜单:源头厂家技术实力与行业优选深度解析 - 品牌企业推荐师(官方)
  • AI智能体实战:从核心原理到LangChain构建自主AI助手
  • ChatGPT高效入门指南:3天建立认知框架、7天掌握结构化提示、30天构建个人AI工作流
  • RTA-OS中断实战:从概念到高效配置的嵌入式系统响应之道
  • Win7上装VMware Horizon Client总失败?别慌,这4个坑我帮你踩过了
  • 2026年 宝钢镀锌HC550/980DHD+Z吉帕钢推荐榜单:超高强汽车用钢/先进高强钢/轻量化镀锌板/吉帕级冲压用钢厂家实力解析 - 品牌企业推荐师(官方)
  • Cortex-M处理器EDBGRQ信号调试机制详解
  • 拒绝热胀冷缩!高精度仪器制造首选的4J36合金品牌推荐 - 品牌2025
  • 基于模糊集理论的灰色预测模型应用方案【附仿真】
  • 解决Keil MDK中ULINK调试器连接LPC4330的Flash烧录问题
  • 从零到日更100篇高赞攻略,我用ChatGPT批量生成的6套私有化工作流,含GPT-4o微调指令集
  • 基于RFSoC的便携6G信道探测系统:FR1与FR3频段实测对比
  • 普通程序员如何转行大模型?从零到精通!程序员转行大模型领域超全攻略
  • 加香机源头工厂如何选?2026香薰机精油/商场香氛系统/加
  • 全文重构还是局部微调?2026国内外10款降AI工具实测指南(含免费工具)
  • 从想法到上线:我用AI在一天内“摸”出了一个面试文档系统
  • 别再死记硬背公式了!用Python模拟一个天气预测的马尔可夫链(附完整代码)