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月前
|
JSON 安全 算法
|
1月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
2月前
|
前端开发 Java
表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
文章通过一个表白墙/留言墙的初级SpringBoot项目实例,详细讲解了如何进行前后端开发,包括定义前后端交互接口、创建SpringBoot项目、编写前端页面、后端代码逻辑及实体类封装的全过程。
102 3
表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
2月前
|
前端开发 Java 数据安全/隐私保护
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
文章通过一个简单的SpringBoot项目,详细介绍了前后端如何实现用户登录功能,包括前端登录页面的创建、后端登录逻辑的处理、使用session验证用户身份以及获取已登录用户信息的方法。
390 2
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
|
21小时前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
11天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
66 13
|
19天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
77 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
2月前
|
机器学习/深度学习 移动开发 自然语言处理
基于人工智能技术的智能导诊系统源码,SpringBoot作为后端服务的框架,提供快速开发,自动配置和生产级特性
当身体不适却不知该挂哪个科室时,智能导诊系统应运而生。患者只需选择不适部位和症状,系统即可迅速推荐正确科室,避免排错队浪费时间。该系统基于SpringBoot、Redis、MyBatis Plus等技术架构,支持多渠道接入,具备自然语言理解和多输入方式,确保高效精准的导诊体验。无论是线上医疗平台还是大型医院,智能导诊系统均能有效优化就诊流程。