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

Spring Boot IoC 实践(二):理解 Bean 的创建与容器管理过程

一、前言

在上一篇文章中,我们初步了解了 Spring Boot 启动时如何创建 IoC(控制反转)容器。
这篇文章通过一个简单示例,从代码与日志输出两个角度,带你理解:

  • Spring Boot 在何时创建 Bean?
  • IoC 容器如何管理 Bean?
  • Bean 是否真的单例?

二、项目结构

项目整体结构如下 👇

java └── com.example.spring.ioc ├── Spring01IocApplication.java // 启动类 └── bean ├── Dog.java // 示例 Bean(本文演示用) └── Person.java // 另一个 Bean(未在本文中用)

三、Dog 类

文件路径:com.example.spring.ioc.bean.Dog.java

package com.example.spring.ioc.bean; public class Dog { public Dog() { System.out.println("Dog 无参构造方法执行"); } }

📘说明:

  • Dog是一个最简单的 Java Bean。
  • 构造方法中加入了System.out.println()输出,用于验证 Bean 的创建时机。

四、主启动类 Spring01IocApplication

文件路径:com.example.spring.ioc.Spring01IocApplication.java

package com.example.spring.ioc; import com.example.spring.ioc.bean.Dog; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class Spring01IocApplication { /** * 创建时机:容器启动过程中就会创建组件对象。 * 单例特性:所有组件默认单例,每次获取都是同一个对象。 */ public static void main(String[] args) { // 1. 启动 Spring 应用 ConfigurableApplicationContext ioc = SpringApplication.run(Spring01IocApplication.class, args); System.out.println("IOc = " + ioc); System.out.println("================================"); // 2. ioc 容器中获取组件 // 2.1 通过名字获取组件 Object dog = ioc.getBean("dog"); System.out.println("dog = " + dog); // 2.2 通过类型获取组件 Dog bean = ioc.getBean(Dog.class); System.out.println("bean = " + bean); Dog bean1 = ioc.getBean(Dog.class); System.out.println("bean1 = " + bean1); Dog bean2 = ioc.getBean(Dog.class); System.out.println("bean2 = " + bean2); } }

💡关键点解析:

  1. SpringApplication.run()启动时,会创建 IoC 容器。
  2. 容器在启动过程中会扫描、加载并实例化所有单例 Bean。
  3. 通过getBean()从容器中取出的 Bean 默认是同一个对象。

五、程序运行结果

运行项目后控制台输出如下(你提供的最终结果)👇

Dog 无参构造方法执行 2026-04-14 15:50:04.832 INFO --- [ main] c.e.spring.ioc.Spring01IocApplication : Started Spring01IocApplication IoC = org.springframework.context.annotation.AnnotationConfigApplicationContext@477b4cdf ================================ dog = com.example.spring.ioc.bean.Dog@37091312 bean = com.example.spring.ioc.bean.Dog@37091312 bean1 = com.example.spring.ioc.bean.Dog@37091312 bean2 = com.example.spring.ioc.bean.Dog@37091312

六、结果分析

通过输出可清晰看到:

  1. 容器启动过程中执行了Dog的构造方法

    Dog 无参构造方法执行

    ▶ 说明 Spring Boot 在启动阶段,就完成了该 Bean 的实例化。

  2. 所有getBean()的对象地址相同

    com.example.spring.ioc.bean.Dog@37091312

    ▶ 证明在默认情况下,DogBean 是单例的。

🧠进一步理解:

  • IoC 容器在创建完成后,会立即注册并实例化所有@Configuration@Component定义的单例 Bean。
  • 只有标注为多例 (@Scope("prototype")) 的 Bean 才会在每次getBean()时重新生成。

七、IoC 容器创建与 Bean 生命周期简图

应用启动 │ ▼ 加载 IoC 容器 (ApplicationContext) │ ▼ 扫描配置与组件 │ ▼ 创建单例 Bean (执行构造方法) │ ▼ 注册到 IoC 容器 │ ▼ 开发者使用 ioc.getBean() 获取实例

八、总结

内容说明
Bean 创建时机容器启动时创建(单例模式)
是否单例是(默认singleton
验证方式查看构造方法输出与对象地址
获取方式getBean("dog")getBean(Dog.class)

http://www.jsqmd.com/news/643052/

相关文章:

  • PMP题库_03_进度管理
  • 高效论文降重避坑方案:2026年TOP5平台功能对比与终极选择建议
  • CSDN读者问答精选:关于Token-Flow使用中的7个高频问题(第二期)
  • 算法打卡第二天/数组增删改查及双指针法
  • 矽力杰 Silergy SY8024 双路同步降压转换器 规格书 佰祥电子
  • 品类创新的本质:不是做新品,是抢“选择入口”
  • 校园IPTV电视系统:基于TCP/IP协议的新一代交互式校园IPTV电视系统的需求锚定和方案设计
  • 2026年口碑好的东莞干式溜光机/东莞环保干式溜光机/东莞溜光机口碑好的厂家推荐 - 行业平台推荐
  • 基于Web Serial API的浏览器端RFID卡号读取实战指南
  • 保姆级教程:在OpenWrt 22.03上,如何修改并编译你自己的LuCI插件(以ne-cnc为例)
  • 2026年口碑好的干湿两用溜光机/自动化干式溜光机/镜面溜光机公司对比推荐 - 品牌宣传支持者
  • “AI写的歌能拿格莱美吗?”——2026奇点大会法律与艺术双委员会联合声明:原创性认定新标准、人类协作度黄金阈值(≥37.6%)首次发布
  • 软件设计原则详解:开闭原则、里氏替换原则、迪米特法则
  • ArcGIS空间聚类实战:如何用Grouping Analysis工具快速划分城市功能区(附避坑指南)
  • 2026年评价高的水性工业漆/河北水性工业漆厂家选择推荐 - 行业平台推荐
  • IndexTTS 2.0创意玩法:用AI语音合成制作有声小说,一人搞定全部角色配音
  • 2026年3月知名的石墨接地实力厂家推荐,放热焊接/低电阻接地模块/石墨接地扁带/风力发电接地施工,石墨接地实力厂家推荐 - 品牌推荐师
  • PHP+JS+CSS打造动态星盘计算器
  • 用MATLAB复现近场2D-MUSIC算法:从信号模型到三维谱峰图(附完整代码)
  • 2026年质量好的水性消防管专用防锈漆/河北水性氟碳漆/水性导电工业漆/设备专用水性工业漆厂家选择推荐 - 品牌宣传支持者
  • Rust 宏系统的结构与扩展方法
  • Mipmap实战解析:从纹理闪烁到视觉平滑的渲染优化之路
  • 2026年评价高的模压软木成形/软木/软木杯垫横向对比厂家推荐 - 行业平台推荐
  • P1165 日志分析题解
  • A股站稳4000点:是反弹起点,还是牛市序幕?
  • 小白5090+cuda12.8复现vision Mamba记录
  • AIAgent架构中的对抗攻击防御体系(2024最新NIST合规框架实测版)
  • 【2026唯一权威指南】:基于217家头部企业实测数据,重构AIAgent可观测性、可审计性、可回滚性三角铁律
  • 2026年口碑好的PVC回收/废料PVC回收用户口碑推荐厂家 - 品牌宣传支持者
  • UniApp里用web-view预览PDF?小心这些性能坑和体验优化点