SpringBoot 启动流程

SpringBoot 之启动流程 加载应用程序上下文扫描应用程序中的所有组件自动配置应用程序环境启动嵌入式Web服务器在下面的章节中,我们将逐一分析这些步骤的源代码。在本文中,我们深入分析了 SpringBoot 应用程序的启动过程的源代码。我们了解了 SpringBoot 如何加载应用程序上下文、扫描应用程序中的所有组件、自动配置应用程序环境以及启动嵌入式Web服务器。这些步骤的源代码展示了 SpringBoot 如何简化应用程序的开发和部署。 阅读详情
  1. 概述

    SpringBoot 是一个基于 Spring 的框架,它通过自动配置和约定大于配置的方式,简化了 Spring 应用程序的开发和部署。在本文中,我们将会深入了解 Spring Boot 的启动流程,掌握 Spring Boot 应用程序是如何启动并初始化的。

  2. 构建环境

    在了解 Spring Boot 的启动流程之前,需要先理解 Spring Boot 的构建环境。Spring Boot 支持多种构建工具,包括 Maven 和 Gradle 等。一般来说,在使用 Maven 构建 Spring Boot 应用程序时,需要将 spring-boot-starter-parent 或 spring-boot-dependencies 作为父项目添加到 pom.xml 中;而在使用 Gradle 时,则需要在 build.gradle 文件中引入相应的依赖。

  3. 主类定义

    Spring Boot 应用程序的入口是一个 Java 类,一般称为主类。主类需要添加 @SpringBootApplication 注解,该注解包含了 @EnableAutoConfiguration、@ComponentScan 和 @Configuration 三个注解。其中,@EnableAutoConfiguration 用于启用 Spring Boot 自动配置功能,@ComponentScan 用于指定要扫描的包,@Configuration 用于标注这是一个配置类。例如:

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}
  1. 启动流程

    Spring Boot 应用程序的启动流程可以分为四个阶段:准备阶段、刷新上下文阶段、后置处理阶段和启动失败处理阶段。下面我们将逐一深入了解每个阶段的细节。

4.1 准备阶段

在准备阶段,Spring Boot 会创建一个 SpringApplication 对象,并对其进行配置。SpringApplication 是 Spring Boot 应用程序的核心类,它负责启动和管理 Spring 应用程序。在创建 SpringApplication 时,可以通过 new SpringApplication(MyApp.class) 或者 SpringApplication.run(MyApp.class, args) 方法来指定要启动的主类。在创建 SpringApplication 对象时,Spring Boot 会自动加载应用程序默认的配置文件(application.properties 或 application.yml),并将其转化为 Spring 环境中的属性值。

4.2 刷新上下文阶段

在准备阶段结束后,Spring Boot 开始进入刷新上下文阶段。在该阶段,Spring Boot 会依次执行以下操作:

4.2.1 创建环境对象

首先,Spring Boot 会根据环境变量 SPRING_APPLICATION_JSON、命令行参数、系统属性等信息创建一个 Environment 对象,并把它设置为 Spring 环境的默认环境。Environment 对象负责管理应用程序的所有配置属性,包括命令行参数等。

4.2.2 加载配置文件

接下来,Spring Boot 会根据默认规则和自定义配置加载配置文件。在默认情况下,Spring Boot 会按照以下顺序加载配置文件:

  • file:./config/application.properties
  • file:./config/application.yml
  • classpath:/config/application.properties
  • classpath:/config/application.yml

如果需要修改默认的配置文件路径,可以在 SpringApplication.run() 方法中通过 --spring.config.location 参数指定。例如,可以通过以下方式指定配置文件路径为 /app/config/:

SpringApplication.run(MyApp.class, "--spring.config.location=/app/config/");

4.2.3 创建 SpringApplication 上下文

接着,Spring Boot 会创建一个 SpringApplication 上下文,并将 Environment 对象设置到上下文中。SpringApplication 上下文是 Spring 应用程序的核心容器,负责管理应用程序的所有 Bean。在创建 SpringApplication 上下文之前,Spring Boot 会根据 classpath 扫描包含 @Component 注解的类,并对其进行注册。这些类通常包括控制器、服务和数据访问对象等组件。

4.2.4 加载 Bean 定义

在创建 SpringApplication 上下文后,Spring Boot 会根据 Bean 定义信息生成所有 Bean 实例,并将其添加到容器中。在加载 Bean 定义时,Spring Boot 会运行所有实现了 BeanFactoryPostProcessor 接口的 BeanFactory 后置处理器。BeanFactory 后置处理器负责在创建 Bean 实例之前修改 Bean 的定义信息,例如替换默认实现、添加 AOP 切面等。

4.2.5 注册 BeanPostProcessor

在加载 Bean 定义后,Spring Boot 会注册所有实现了 BeanPostProcessor 接口的 Bean 后置处理器。Bean 后置处理器负责在 Bean 被实例化前后对其进行一些操作,例如添加代理对象、修改属性值等。

4.2.6 初始化非 Web 应用程序上下文

在完成以上操作后,Spring Boot 会初始化非 Web 应用程序上下文,包括事件监听器和组件初始化器等。这些组件通常用于应用程序初始化或清理工作,例如加载资源文件、初始化数据库连接池等。

4.2.7 刷新上下文

最后,在完成所有初始化工作之后,Spring Boot 会调用 refresh() 方法来刷新 SpringApplication 上下文。该方法会启动 Spring 应用程序并加载所有 Bean 实例,然后将上下文发布到 Spring 事件通知机制中,供其他组件使用。

4.3 后置处理阶段

在刷新上下文阶段结束后,Spring Boot 会进入后置处理阶段。在该阶段,Spring Boot 会运行所有实现了 ApplicationRunner 或 CommandLineRunner 接口的组件。这些组件通常用于应用程序启动后的初始化工作,例如读取配置文件、初始化缓存等。

4.4 启动失败处理阶段

如果在刷新 SpringApplication 上下文过程中发生异常,则 Spring Boot 会进入启动失败处理阶段。在该阶段,Spring Boot 会打印出所有异常信息,并尝试优雅地关闭 SpringApplication 上下文。如果在关闭上下文时又发生异常,则 Spring Boot 会将该异常作为新的启动异常抛出。

  1. 总结

综上所述,Spring Boot 应用程序的启动流程可以分为准备阶段、刷新上下文阶段、后置处理阶段和启动失败处理阶段。在启动过程中,Spring Boot 会自动加载配置文件、扫描包含 @Component 注解的类、生成 Bean 定义并初始化所有 Bean 实例等。因此,使用 Spring Boot 可以大大简化应用程序的开发和部署,提高生产效率和代码质量。

Spring Boot启动流程详解 Spring Boot是一个基于Spring框架的快速开发工具,它可以帮助我们快速搭建一个可运行的Spring应用。本文将详细介绍Spring Boot的启动流程,帮助大家更好地理解Spring Boot的工作原理。 阅读详情

相关推荐

SpringBoot启动流程

本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。 一、SpringBoot启动流程图 二、SpringBoot启动入口 @EnableScheduling @EnableAsync @SpringBootApplication @EnableAspectJAutoProxy @ComponentScan(basePackages = { "cn.gov.zcy.demand", "cn.gov.zcy.

weixin_64314555的博客 2万+

Springboot启动流程

一、SpringBoot启动的时候,会构造一个SpringApplication的实例,构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事: 1、把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数. 2、判断是否是web程序,并设置到webEnvironment的boolean属性中. 3、创建并初始化ApplicationInitializer,设置到initializers属性中 。 4、创建并初始化App

zsh2050的专栏 6万+

Spring Boot的启动流程

- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 创建springbootApplication对象 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - 1. 创建springbootApplication对象springboot容器初始化操作 2. 获取当前应用的启动类型。2.1 :通过判断当前classpath是否加载servlet类,返回servlet web启动方式。

流楚丶格念的博客 2万+

9千字长文带你了解SpringBoot启动过程–史上最详细 SpringBoot启动流程-图文并茂

9千字长文带你了解SpringBoot启动过程–史上最详细 SpringBoot启动流程-图文并茂

weixin_42113716的博客 1万+

conda环境的复制、备份操作

请确保将 source_env 替换为你要复制的现有环境的名称,并将 target_env 替换为你要创建的新环境的名称。要备份一个Conda虚拟环境,你需要将环境的配置信息和依赖包列表保存起来,以便在需要的时候能够重新创建相同的环境。要将现有的 conda 环境复制为其他环境,可以使用 conda create 命令并克隆已存在的环境。

Dollhan的博客 3771

摄像机实时接入分析平台视频分析网关AI智能分析智慧营业厅方案

通过智能化的改造,可以提高营业厅的运营效率,降低运营成本,同时提升客户体验和安全保障。

EasyDarwin开源社区技术博客 703

SpringBoot启动流程总结

一直很好奇SpringBoot这么一个大怪物,启动的时候做了哪些事情,然后看了很多老师讲的教学视频,然后自己想好好整理一下,做下学习笔记下次也方便自己阅读 1、首先从main方法开始看 public static void main(String[] args) { //代码很简单SpringApplication.run(); SpringApplication.run(Cons...

mnicsm的博客 6万+

ENVI5.6 Seamless Mosaic多景影像镶嵌色差问题

多景影像无缝镶嵌色差问题拟解决方法

Matchaya的博客 7702

SpringBoot系列之【启动流程详解】

文章目录前言一、SpringBoot特点二、SpringBoot启动类入口1.注解:@SpringBootApplication@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan2.main方法SpringApplication#run实例化SpringApplication对象SpringApplication.run(java.lang.String...)三、SpringBoot启动事件EventPublishingRunLis

qq_21609191的博客 1万+

基于Simulink的电源纹波抑制仿真

电源纹波(Power Supply Ripple)是指直流电源输出中存在的交流分量。纹波的存在会导致电压波动,进而影响负载设备的性能和寿命。为了确保高质量的电源输出,通常需要设计有效的滤波电路来抑制纹波。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电源纹波抑制方案。本教程将详细介绍如何使用 Simulink 进行电源纹波抑制的仿真实例。通过本教程,我们详细介绍了如何使用 Simulink 进行电源纹波抑制的仿真实例。背景介绍:理解电源纹波及其对电力电子系统的影响。仿真建模过程。

xiaoheshang_123的博客 513

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

dvlinker的技术专栏 7165

SPRINGBOOT启动流程及其原理

Spring Boot、Spring MVC 和 Spring 有什么区别? 分别描述各自的特征: Spring框架就像一个家族,有众多衍生产品例如boot、security、jpa等等;但他们的基础都是Spring 的ioc和 aop,ioc提供了依赖注入的容器,aop解决了面向切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能。 Spring MV...

u014352080的专栏 3万+

基于Python的农业市场价格抓取与供需分析:现代爬虫技术与实战应用

在正式开始爬虫开发之前,我们首先了解爬虫的基本概念和工作原理。爬虫(Web Scraping)是通过编程的方式,自动从互联网上获取信息的技术。它可以帮助我们提取HTML页面中的特定数据,通常用于收集并处理大量信息。发送HTTP请求:爬虫需要向目标网站发送请求,获取网站的HTML页面内容。解析HTML页面:通过HTML解析器对获取的页面内容进行解析,提取其中需要的数据。数据清洗与存储:将提取的数据进行清洗,去除多余的字符或无关内容,然后存储到合适的格式(如CSV文件、数据库等)中。数据分析与可视化。

2201_76125261的博客 1117

总结:Springboot启动流程

一、总结 1、关于SpringApplication SpringBoot的启动主要是通过实例化SpringApplication来启动的。 2、实例化SpringApplication时做了什么? SpringApplication的构造方法做了几件事情: 推断WebApplicationType,主要思想就是在当前的classpath下搜索特定的类 搜索META-INF\spring.factories文件配置的ApplicationContextInitializer的实现类 搜索MET

w2009211777的专栏 1万+

【四足机器人项目实战】四足机器人运动学、动力学模型

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、四足机器人实际模型的物理难点二、四足机器人运动学模型1.方法一:DH法建立运动学模型(1)运动学建模构型方法(2)运动学模型描述方法1、基于DH法四足机器人单腿运动学模型公式推导(0)DH法科普1)原理2)实现过程3)评价(1)四足机器人的建模规则、坐标系定义及实物参数确定1)标准Denavit-Hartenberg法建模规则2)单腿运动学模型坐标系定义示意图及简化模型3)

qq_35635374的博客 1万+

麻辣香锅病毒分析

Spicy Hot Pot浏览器劫持病毒(麻辣香锅病毒)从2020年初被安全公司监测到,因其病毒模块带有MLXG_KM被安全行业代称麻辣香锅病毒。目前通过各种激活工具传播, 包括暴风激活、小马激活和KMS激活等诸多工具,疑似与下载站进行合作推广此类激活工具。Spicy Hot Pot 是一个浏览器劫持 Rootkit,它会将用户的主页更改为指向恶意软件操作员控制的页面,此外还会将内存转储从机器上传到预定义的服务器,并结合本地更新功能以确保其保持更新。通常浏览器劫持者会通过更改用户主页的恶意可执行文件或注册表

不忘初心,护天下安全! 4787

[springboot]springboot启动流程

Spring Boot程序有一个入口,就是main方法。main里面调用SpringApplication.run()启动整个Spring Boot程序,该方法所在类需要使用@SpringBootApplication复合注解。 其中需要关注的是: @SpringBootApplication注解其实是包含了三个注解: @EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置。简单概括一下就是,是借助@Import的帮助,将所有符合自动配

浅夜 9251

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

boot spring 一直转 启动_SpringBoot启动流程解析

写在前面:由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图keepRunning方法)。本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。总览:上图为SpringBoot启动结构图,我们发现启动流程主要分...

weixin_35245427的博客 763

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SpringBoot启动流程解析(总结的非常好,很清晰!)

由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图keepRunning方法)。 本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。 总览: 上图为Sprin...

咖啡的博客 3万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SpringBoot启动流程解析

SpringBoot启动流程和加载顺序,以及思考心得

well_nature的专栏 4212

springboot启动流程_Spring Boot启动流程讲解(一)

介绍:本文使用Spring Boot 2.3.1.RELEASE 讲解1.启动类(这个谁都知道)@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class...

weixin_39996750的博客 140

SpringBoot的启动流程

以下就是一个SpringBoot启动的入口,想要了解SpringBoot的启动过程,就从这里开始。这里我们直接看重点的方法。最终就是这部分代码了。那么接下来就需要分两方面介绍SpringBoot的启动过程。一个是的初始化过程,一个是的启动过程。

m0_62960816的博客 1888

Springboot的启动流程

Spring Boot启动流程是一个高度封装的过程,核心目标是将Spring应用上下文初始化并启动。流程分为四个阶段:1)通过main方法和SpringApplication.run()启动入口;2)初始化SpringApplication,包括确定应用类型、收集初始配置和主配置类;3)准备环境,加载配置文件和命令行参数;4)创建并刷新应用上下文,完成Bean定义解析、依赖注入和Web服务器启动。最后发布ApplicationReadyEvent通知启动完成。整个过程涉及SpringApplication、

csdn_tom_168的博客 1199

springboot: Spring Boot 启动流程详解

Component@Override// 应用启动完成后执行System.out.println("应用启动完成,可以开始处理业务逻辑");简化配置:通过自动配置减少 XML 配置嵌入式容器:内置 Tomcat、Jetty 等 Web 服务器事件驱动:通过事件机制实现扩展点条件化装配:根据条件自动配置 Bean健康检查:提供完善的应用健康监控理解 Spring Boot 的启动流程对于排查启动问题、进行自定义扩展和优化应用性能都非常有帮助。

talenteddriver的博客 1703
上一篇: Java多线程实操之模拟扑克抓牌
下一篇: 用Spring Boot轻松实现定时任务--原理详解
JavaWizard-M
博客等级 码龄6年 3159粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值