Spring 的启动过程
·
Spring 的启动过程
本质上是IoC 容器(ApplicationContext)的创建与初始化
- 加载配置:加载配置文件(XML、注解配置等)
- 创建容器:实例化 ApplicationContext容器
- Bean定义加载:将XML、注解配置中的Bean元信息,作成BeanDefine
- BeanFactory 实例化:创建Bean对应的BeanFactory。
- Bean 实例化前准备:注册所有Bean 的后置处理器 BeanPostProcessor
- 单例 Bean 预实例化:实例化所有非懒加载的单例 Bean。(完整的 Bean 生命周期)
- 发布事件:发布 ContextRefreshedEvent 事件,容器已经就绪
- 容器启动完成:ApplicationContext可以正常使用
Spring Boot 的启动流程?
Spring Boot 的启动是在 Spring 之上增加了自动装配和嵌入式服务器等能力:
主要分两步:创建SpringApplication 实例和执行 run() 方法
启动入口是主类的main方法,执行SpringApplication.run()。
创建 SpringApplication 实例
- 推断应用类型(响应式、Servlet或普通应用)
- 加载
META-INF/spring.factories中的初始化器、监听器
执行 run() 方法
- 准备环境:读取命令行参数、加载
application.properties/yml配置。 - 创建并刷新 ApplicationContext:此时进入 Spring 标准启动流程。加载配置类(含自动配置类)、注册Bean后置处理器、Bean初始化等IOC初始化的流程。
- 启动嵌入式服务器:Tomcat/Jetty 自动启动并注册 DispatcherServlet。
run方法之后
- 调用实现了
CommandLineRunner或ApplicationRunner的类,通常用于执行初始化逻辑
Bean 的生命周期
-
实例化:构造函数实例化对象
-
依赖注入:为对象的属性赋值(去容器中找)
-
实现Aware接口:Bean对象通过实现Aware相关接口,主动获取Bean在容器中的信息。如:实现BeanNameAware接口,可以获取当前Bean在容器中的名字。
-
BeanPostProcessor:初始化前增强方法。
BeanPostProcessor 有两个方法,分别在 Bean 初始化前后执行:
postProcessBeforeInitialization:初始化前增强(如校验属性、设置默认值)。postProcessAfterInitialization:初始化后增强(如创建 AOP 代理、替换 Bean
-
初始化:执行初始化方法,有多种方式。
-
BeanPostProcessor:初始化后增强方法。
-
Bean就绪:可以正常使用
更多推荐




所有评论(0)