Spring Boot程序有一个入口,就是main方法。main里面调用SpringApplication.run()启动整个Spring Boot程序,该方法所在类需要使用@SpringBootApplication复合注解。

其中需要关注的是:

@SpringBootApplication注解其实是包含了三个注解:

(1)@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置。简单概括一下就是,是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器。

(2)@Configuration:它就是JavaConfig形式的Spring Ioc容器的配置类。被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境。

(3)@ComponentScan:组件扫描,可自动发现和装配Bean,功能其实就是自动扫描并加载符合条件的组件或者bean定义,最终将这些bean定义加载到IoC容器中。

二:详细解释:

1、SpringBoot启动的时候,会构造一个SpringApplication的实例,然后调用这个实例的run方法,在run方法调用之前,也就是构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:

(1)把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数.
(2)判断是否是web程序,并设置到webEnvironment的boolean属性中.
(3)创建并初始化ApplicationInitializer,设置到initializers属性中 。
(4)创建并初始化ApplicationListener,设置到listeners属性中 。
(5)初始化主类mainApplicatioClass。

源代码:

    private void initialize(Object[] sources) {
if (sources != null && sources.length > 0) {
//把sources设置到SpringApplication的sources属性中,目前只是一个MyApplication类对象
this.sources.addAll(Arrays.asList(sources));
}
//判断是否是web程序,并设置到webEnvironment的boolean属性中
this.webEnvironment = deduceWebEnvironment();
//找出所有的初始化器,默认有5个,设置到initializers属性中 。
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
//找出所有的应用程序监听器,默认有9个,设置到listeners属性中 。
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
//找出运行的主类(main class)
this.mainApplicationClass = deduceMainApplicationClass();
}

2、SpringApplication构造完成之后调用run方法,启动SpringApplication,run方法执行的时候会做以下几件事:

(1)构造一个StopWatch计时器,观察SpringApplication的执行 。
(2)获取SpringApplicationRunListeners并封装到SpringApplicationRunListeners中启动,用于监听run方法的执行。
(3)创建并初始化ApplicationArguments,获取run方法传递的args参数。
(4)创建并初始化ConfigurableEnvironment(环境配置)。
(5)打印banner(只用在Classpath下添加字符文件图标,就可以在启动时候打印)。
(3)构造Spring容器(ApplicationContext)上下文。
(4)SpringApplicationRunListeners发布finish事件。
(5)StopWatch计时器停止计时。

如果想要深入看详细的步骤,建议去网上搜索,很多作者都写了细节的部分。

可以参考我认为写的不错的两篇文章:

https://blog.csdn.net/u014252478/article/details/88789852?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3

https://blog.csdn.net/m0_37962779/article/details/78957309?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

springboot启动流程简单总结的更多相关文章

  1. Springboot启动流程简单分析

    springboot启动的类为SpringApplication,执行构造函数初始化属性值后进入run方法: 然后返回ConfigurableApplicationContext(spring应用). ...

  2. SpringBoot启动流程分析(六):IoC容器依赖注入

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  3. SpringBoot启动流程分析(四):IoC容器的初始化过程

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  4. SpringBoot启动流程及其原理

    Spring Boot.Spring MVC 和 Spring 有什么区别? 分别描述各自的特征: Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等:但他们的 ...

  5. SpringBoot 启动流程

    SpringBoot 启动流程 加载 resources/META-INF/spring.factories 中配置的 ApplicationContextInitializer 和 Applicat ...

  6. SpringBoot源码学习3——SpringBoot启动流程

    系列文章目录和关于我 一丶前言 在 <SpringBoot源码学习1--SpringBoot自动装配源码解析+Spring如何处理配置类的>中我们学习了SpringBoot自动装配如何实现 ...

  7. SpringBoot启动流程解析

    写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图ke ...

  8. SpringBoot启动流程分析(五):SpringBoot自动装配原理实现

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  9. SpringBoot启动流程分析(一):SpringApplication类初始化过程

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  10. SpringBoot启动流程分析(二):SpringApplication的run方法

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (151)-- 算法导论12.2 7题

    七.用go语言,对于一棵有 n 个结点的二叉搜索树,有另一种方法来实现中序遍历,先调用 TREE-MINIMUM 找到这棵树中的最小元素,然后再调用 n-1 次的 TREE-SUCCESSOR.证明: ...

  2. termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器

    第一步,先安装termux和anlinux,在此之前先安装一个vpn 下面是termux的官网(官网是没有内嵌任何广告的): termux/termux-app: Termux - a termina ...

  3. 拖.sql文件到cmd中运行

    这个非常简单,但是网上说的又不清楚. 第一步cmd中进入数据库           其操作是 mysql -u root - p 密码: 第二步使用数据库         其操作是use 数据库名字: ...

  4. Java并发(十九)----Monitor原理及Synchronized原理

    1.Java 对象头 以 32 位虚拟机为例 普通对象 |--------------------------------------------------------------| |       ...

  5. 87 GB 模型种子,GPT-4 缩小版,超越ChatGPT3.5,多平台在线体验

    瞬间爆火的Mixtral 8x7B 大家好,我是老章 最近风头最盛的大模型当属Mistral AI 发布的Mixtral 8x7B了,火爆程度压过Google的Gemini. 缘起是MistralAI ...

  6. 漆包线工厂生产管理MES系统解决方案

    ​  漆包线行业老板痛点: 1.漆包线比较传统的行业,一般都是靠人工去管理,老板想及时知道工厂的生产,销售.出入库.库存情况: 2.型号多称重打印易错,没有系统前 :称重打印,出入库,财务脱节,库存和 ...

  7. Odoo Windows系统下部署方法

    Windows 系统下 Odoo 环境搭建流程 ① 安装python2.7 安装完成后 在命令行(cmd)输入python 如果不出现内部错误提示则表示环境配置成功    当出现错误时要设置环境变量 ...

  8. ASR项目实战-前处理

    本文深入探讨前处理环节. 首先介绍一些基本的名词,比如 文件名后缀 文件格式 音频格式 采样率和位深 预备知识 文件名后缀.文件格式和音频格式 常见的音频文件,比如.wav..mp3..m4a..wm ...

  9. javaScript正则截取自定义标签-javascript-zheng-ze-jie-qu-zi-ding-yi-biao-qian

    title: javaScript正则截取自定义标签 date: 2021-12-29 17:31:48.448 updated: 2021-12-29 17:31:48.448 url: https ...

  10. 解决vps掉线问题

    解决vps掉线问题 常见现象 在有时候遇到网络或者断电等一系列突发状况时,可能会导致在传输大文件或是好不容易拿到一个session断连了,所以有了这次学习解决这个问题的记录 场景复现 这里直接用kal ...