SpringBoot启动流程:
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容器中,一张图说明整个过程
具体执行流程
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项目:
目录结构如图 自动生成启动类和空的配置文件
全局的配置文件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