Spring 的启动过程

本质上是IoC 容器(ApplicationContext)的创建与初始化

  1. 加载配置:加载配置文件(XML、注解配置等)
  2. 创建容器:实例化 ApplicationContext容器
  3. Bean定义加载:将XML、注解配置中的Bean元信息,作成BeanDefine
  4. BeanFactory 实例化:创建Bean对应的BeanFactory。
  5. Bean 实例化前准备:注册所有Bean 的后置处理器 BeanPostProcessor
  6. 单例 Bean 预实例化:实例化所有非懒加载的单例 Bean。(完整的 Bean 生命周期)
  7. 发布事件:发布 ContextRefreshedEvent 事件,容器已经就绪
  8. 容器启动完成: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方法之后

  • 调用实现了 CommandLineRunnerApplicationRunner的类,通常用于执行初始化逻辑

Bean 的生命周期

  • 实例化:构造函数实例化对象

  • 依赖注入:为对象的属性赋值(去容器中找)

  • 实现Aware接口:Bean对象通过实现Aware相关接口,主动获取Bean在容器中的信息。如:实现BeanNameAware接口,可以获取当前Bean在容器中的名字。

  • BeanPostProcessor:初始化前增强方法。

    BeanPostProcessor 有两个方法,分别在 Bean 初始化前后执行:

    • postProcessBeforeInitialization:初始化前增强(如校验属性、设置默认值)。
    • postProcessAfterInitialization:初始化后增强(如创建 AOP 代理、替换 Bean
  • 初始化:执行初始化方法,有多种方式。

  • BeanPostProcessor:初始化后增强方法。

  • Bean就绪:可以正常使用

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐