SpringBoot加载配置和启动
1.@SpringBootApplication 注解包含 @Configuration @EnableAutoConfiguration @ComponentScan 三个是最重要的注解,@SpringBootApplication整合了三个注解使用者写起来看起来都比较简洁。
1.1@Configuration
它就是JavaConfig形式的Spring Ioc容器的配置类使用的那个@Configuration,这里的启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类。
1.2@EnableAutoConfiguration
@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。
SpringFactoriesLoader其主要功能就是从指定的配置文件META-INF/spring.factories加载配置。将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。
1.3 Springboot启动简单流程
SpringBoot启动流程分为两个步骤:1、初始化SpringApplication对象 2、执行该对象的run方法
SpringBoot应用的整个启动流程都封装在SpringApplication.run方法中
当我们运行SpringApplication的main方法时,调用静态方法run()首先是实例化,SpringApplication初始化的时候主要做主要做三件事:
a) 根据classpath下是否存在(ConfigurableWebApplicationContext)判断是否要启动一个web applicationContext。
b) SpringFactoriesInstances加载classpath下所有可用的ApplicationContextInitializer
c) SpringFactoriesInstances加载classpath下所有可用的ApplicationListener
1.3.2 SpringApplicatio实例化完成并且完成配置后调用run()方法,首先遍历初始化过程中加载的SpringApplicationRunListeners,然后调用starting(),开始监听springApplication的启动。
1.3.3 加载SpringBoot配置环境(ConfigurableEnvironment),如果是通过web容器发布,会加载StandardEnvironment。将配置环境(Environment)加入到监听器对象中(SpringApplicationRunListeners)。
1.3.4 banner属性的设置
1.3.5 ConfigurableApplicationContext(应用配置上下文)创建,根据webEnvironment是否是web环境创建默认的contextClass,AnnotationConfigEmbeddedWebApplicationContext(通过扫描所有注解类来加载bean)和ConfigurableWebApplicationContext),最后通过BeanUtils实例化上下文对象,并返回。
1.3.6 prepareContext()方法将listeners、environment、applicationArguments、banner等重要组件与上下文对象关联。
1.3.7 refreshContext(context),bean的实例化完成IoC容器可用的最后一道工序。
1.3.8 最后springboot做一些收尾工作。自此springboot的简单流程到此结束。
初始化Bean
spring初始化bean会在ApplicationRunner和CommandLineRunner接口调用之前。
启动过程 简述
1、配置属性
初始化SpringApplication对象,记录下用户指定的SpringBoot配置类信息
2、获取并加载监听器,发布应用开始启动事件
调用starting()方法通知所有的SpringApplicationRunListeners应用开始启动了
3、初始化输入参数
4、配置环境,输出banner
创建并配置当前应用将要使用的Environment.
5、创建上下文
根据是否是web项目,来创建不同的ApplicationContext容器
6.、预处理上下文
7.、刷新上下文
调用ApplicationContext的refresh()方法刷新容器。备注:启动Tomcat就是在第7步刷新上下文
8、发布应用启动/完成启动事件
参考资料
springboot启动时初始化数据
https://blog.csdn.net/pjmike233/article/details/81908540