Spring Boot IoC 实践(二):理解 Bean 的创建与容器管理过程
一、前言在上一篇文章中我们初步了解了 Spring Boot 启动时如何创建 IoC控制反转容器。这篇文章通过一个简单示例从代码与日志输出两个角度带你理解Spring Boot 在何时创建 BeanIoC 容器如何管理 BeanBean 是否真的单例二、项目结构项目整体结构如下 java └── com.example.spring.ioc ├── Spring01IocApplication.java // 启动类 └── bean ├── Dog.java // 示例 Bean本文演示用 └── Person.java // 另一个 Bean未在本文中用三、Dog 类文件路径com.example.spring.ioc.bean.Dog.javapackage 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.javapackage 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); } }关键点解析SpringApplication.run()启动时会创建 IoC 容器。容器在启动过程中会扫描、加载并实例化所有单例 Bean。通过getBean()从容器中取出的 Bean 默认是同一个对象。五、程序运行结果运行项目后控制台输出如下你提供的最终结果Dog 无参构造方法执行 2026-04-14 15:50:04.832 INFO --- [ main] c.e.spring.ioc.Spring01IocApplication : Started Spring01IocApplication IoC org.springframework.context.annotation.AnnotationConfigApplicationContext477b4cdf dog com.example.spring.ioc.bean.Dog37091312 bean com.example.spring.ioc.bean.Dog37091312 bean1 com.example.spring.ioc.bean.Dog37091312 bean2 com.example.spring.ioc.bean.Dog37091312六、结果分析通过输出可清晰看到容器启动过程中执行了Dog的构造方法Dog 无参构造方法执行▶ 说明 Spring Boot 在启动阶段就完成了该 Bean 的实例化。所有getBean()的对象地址相同com.example.spring.ioc.bean.Dog37091312▶ 证明在默认情况下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.coloradmin.cn/o/2518786.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!