SpringBoot的源码启动的步骤

简介: SpringBoot的源码启动的步骤

1️⃣SpringBoot源码启动的步骤

Spring Boot的启动源码可以分为以下几个阶段,每个阶段都有不同的功能:

1.1 加载配置文件阶段

读取并解析application.properties和application.yml等配置文件。

将配置信息加载到Environment对象中,以供后续使用。

1.2 创建应用上下文阶段

根据配置信息创建ApplicationContext,默认为AnnotationConfigApplicationContext或GenericApplicationContext实例。注册Bean定义,扫描注解并将其转换为相应的Bean定义。

1.3 准备阶段

配置ApplicationContext的一些属性,如相关的监听器、ResourceLoader等。

设置ApplicationContext的环境变量,包括激活的Profiles等。

执行ApplicationContextInitializer接口的initialize()方法,完成初始化操作。

1.4 刷新上下文阶段

调用ApplicationContext的refresh()方法,开始刷新上下文。

进行Bean的初始化操作,包括实例化、依赖注入、后处理等。

触发各种生命周期回调,如BeanPostProcessor等。

1.5 启动阶段

检查ApplicationContext中是否存在ApplicationRunner和CommandLineRunner接口的实现类。

如果存在,通过反射执行它们的run()方法,执行自定义的启动逻辑。

1.6 完成阶段

发布ApplicationReadyEvent事件,表示应用程序已经准备就绪。

执行ApplicationContext注册的其他回调方法或者监听器。

2️⃣启动阶段的功能

  • 1 加载配置文件阶段:读取配置文件,并将配置信息加载到Environment对象中,为后续使用做准备。
  • 2 创建应用上下文阶段:创建并配置应用的上下文,包括Bean定义的扫描和注册。
  • 3 准备阶段:配置ApplicationContext的属性和环境变量,并执行初始化操作。
  • 4 刷新上下文阶段:刷新上下文,进行Bean的初始化和生命周期回调。
  • 5 启动阶段:执行自定义的启动逻辑,如ApplicationRunner和CommandLineRunner接口的实现类。
  • 6 完成阶段:发布应用程序已经准备就绪的事件,并执行其他回调方法或监听器。

这些阶段的顺序和功能确保了Spring Boot应用程序的正确启动和准备就绪,使应用程序可以正常运行。

3️⃣源码解读

3.1 源码解读启动的详细流程

  • 加载启动类:通过Java的反射机制,加载指定的启动类(通常是带有@SpringBootApplication注解的类)。
  • 解析配置: 根据spring-boot-starter依赖中的META-INF/spring.factories文件,获取所有自动配置类的全限定名。然后根据配置文件(如application.properties和application.yml)读取配置信息,并将其加载到Environment中。
  • 创建启动类的应用上下文:使用ApplicationContextInitializer接口初始化应用上下文,并按需设置激活的Profiles、默认属性等。
  • 预准备: 执行SpringApplicationRunListeners接口的starting()方法,触发应用程序启动前的事件监听器。
  • 准备阶段:
  1. 创建BeanFactory对象。
  2. 注册ApplicationContextInitializer接口的实现类,执行其initialize()方法。
  3. 注册ApplicationListener接口的实现类,准备发布应用程序事件。
  • 刷新上下文: 执行ApplicationContext的refresh()方法,进行Bean的加载、实例化、依赖注入等操作。
  • 后置处理: 应用启动完成,执行ApplicationRunner和CommandLineRunner的扩展,可以完成一些启动后初始化工作。
  • 启动完成: 执行SpringApplicationRunListeners接口的started()方法,触发应用程序已经启动的事件监听器。
  • 运行应用程序:根据配置和自动装配机制,创建并启动Spring Boot应用程序。
  • 运行阶段: 执行SpringApplicationRunListeners接口的running()方法,触发应用程序运行中的事件监听器。
  • 应用程序失败处理: 在应用程序出现异常时,执行SpringApplicationRunListeners接口的failed()方法,触发应用程序启动失败的事件监听器。

4️⃣ 扩展接口

在以上这个过程中,有一些扩展点可以进行自定义扩展:

  • 1. ApplicationContextInitializer接口:用于在创建应用上下文之前对其进行初始化操作。
  • 2. BeanPostProcessor接口:用于在Bean实例化和初始化过程中对其进行后置处理。
  • 3. ApplicationRunner接口和CommandLineRunner接口:用于定义在应用程序已经启动后执行的任务。
  • 4. SpringApplicationRunListener接口:用于定义应用程序启动和运行期间的事件监听器,可以在应用程序的不同阶段执行自定义逻辑。

通过实现或扩展这些接口,可以在Spring Boot的启动过程中添加自定义的功能、初始化操作或者监听应用程序事件

相关文章
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的钢材销售管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的钢材销售管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
10 3
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的银行柜台管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的银行柜台管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
18 2
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的网络相册的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的网络相册的详细设计和实现(源码+lw+部署文档+讲解等)
11 1
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的食品安全信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的食品安全信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
17 2
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学生兼职管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的大学生兼职管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
13 1
|
2天前
|
IDE Java 测试技术
Springboot单元测试步骤
Springboot单元测试步骤
7 0
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学生心理健康诊断专家系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的大学生心理健康诊断专家系统的详细设计和实现(源码+lw+部署文档+讲解等)
6 0
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学生成绩管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的大学生成绩管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
5 0
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大棚蔬菜管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的大棚蔬菜管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
2 0
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学生爱心互助代购网站的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的大学生爱心互助代购网站的详细设计和实现(源码+lw+部署文档+讲解等)
3 0