Spring boot启动和Spring启动

Spring boot启动

第一步,启动main方法,

创建 SpringApplication 实例:new springApplication(),

SpringApplication 是启动 Spring Boot 应用的核心类。它负责启动应用的上下文,并执行所有必要的初始化步骤 。 这里推断应用类型,是web还是普通应用,设置初始化器,监听器

(我记得推断应用类型,是判断类路径中存在servlet 相关类,就是web类)

第二步,调用run方法,真正启动流程就在这里,

准备上下文:

在 run 方法中,首先会准备一个 ApplicationContext

1)加载配置

根据 @SpringBootApplication 中的设置,加载应用的配置文件(如 application.properties 或 application.yml),系统变量,命令行参数,将其转化为配置属性(最终封装成configureableEnvironment ),这一步就是把配置全准备好

2)执行自动装配:通过 @EnableAutoConfiguration 注解,Spring Boot 会自动装配必要的组件。例如,如果存在数据库驱动,则自动配置 DataSource。

3)启动应用上下文:启动 ApplicationContext,加载配置类,componentScan 就是这在执行的。完成 Bean 的初始化和依赖注入。如果是web应用,启动tomcat服务器

4)触发 ApplicationRunner 和 CommandLineRunner:如果定义了 ApplicationRunner 或 CommandLineRunner 接口的实现类,Spring Boot 会在应用启动后自动调用它们。

5)发布applicationReadyEvent,所有启动流程结束,应用进入运行状态,准备好接收请求

原生IOC启动流程

  1. 加载配置资源

  2. 解析为BeanDefinition

  3. 初始化Bean工厂、执行工厂后置处理器、注册后置处理器

  4. 实例化单例Bean、依赖注入、生命周期

全程只管Bean

SpringBoot启动流程

  1. 初始化SpringApplication(准备监听器、初始化器)

  2. 准备运行环境、加载配置文件

  3. 打印Banner、创建应用上下文

  4. 执行自动配置(大量自动配置类生效)

  5. 刷新IOC容器(这里才开始走上面原生IOC全套流程)

  6. 启动内嵌Tomcat

  7. 执行收尾回调、应用就绪