SpringBoot启动流程源码跟踪

SpringBoot启动流程:

         SpringBoot核心功能:

  1. 可以以jar包的形式独立运行
  2. 内嵌多种servlet容器
  3. 提供集成化的pom
  4. 自动装备bean,只是一些通用场景,一般需要自己配置
  5. 提供监控
  6. 无代码和xml配置

优点:

  1. 快速构建项目
  2. 主流框架无配置继承
  3. 独立运行,无需依赖容器
  4. 提高开发部署效率
  5. 与云计算集成

启动流程

1.启动类,程序入口

SpringBoot启动流程源码跟踪_第1张图片

@SpirngBootApplication注解 集合了三个注解

         1.@SpringBootConfiguration Spring的配置注解

         2.@ConponentScan 包扫描 默认扫描此注解所在类的包

         3.@EnableAutoConfiguration 此注解最为重要

 

作用是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IOC容器,自身定义有@Import和@AutoConfigurationPackage,通过导入自动配置的组件EnableAutoConfigurationImportSelector和Registrar;
Registrar 的最庸是注册一个Bean的定义,主要是为了返回当前主程序类的同级以及子级的包组件;
EnableAutoConfigurationImportSelector实现了DeferredImportSelector
,继承了ImportSelector,主要调用selectImports(AnnotationMetadata
)方法(本类中有重载的无参方法,跟源码的时候要注意),主要加载"META-INF/spring-autoconfigure-metadata.properties路径下的各种自动配置
有kafka的,数据库的,java的jmx的等等;
最终会把Bean全部加载到IOC容器中,一张图说明整个过程
 
具体执行流程

SpringBoot启动流程源码跟踪_第2张图片

1.调用SpringApplication的run方法的时候,首先需要用自己写的测试类做参数,创建一个SpringApplication对象,其中在构造方法中看到了ApplicationContextInitializer和ApplicationListener
 
2.调用run方法
 
初始化一个监控对象
 
通过System类和系统交互
获取监听对象
 
执行监听对象
 
准备环境,标准的环境 默认的配置
 
创建ConfigurableApplicationContext为注解类型AnnotationConfigApplicationContext
创建初始化工厂实例  在创建SpringBootApplication的时候也会初始化
 
为所有的监听器设置上下文并开始监听
然后刷新上下文 回到了Spring启动工程那一套
https://blog.csdn.net/m0_38120325/article/details/86743070
暴露出AfterRefresh方法
然后记录完成启动的时间
一个完整的过程的图
 
1.使用IDEA创建SpringBoot项目:

SpringBoot启动流程源码跟踪_第3张图片

目录结构如图 自动生成启动类和空的配置文件
            全局的配置文件application.properties或application.yml,配置文件路径:src/main/resource目录下或类路径下的/config下。
2.@RestController
 

Controller和ResponseBody的集合;

3.使用@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})来导入特殊的xml配置
4.通过(exclude = {DataSourceAutoConfiguration.class})关闭自动配置

5.在Pom中可以不使用Boot的父级POM

SpringBoot启动流程源码跟踪_第4张图片

你可能感兴趣的:(Spring)