springBoot刷新流程
2024-12-06 14:21:21 0 举报
描述了springBoot的主体刷新流程
作者其他创作
大纲/内容
整个spring Boot项目启动刷新完成
加载配置在spring.factories文件中的ApplicationContextInitializer,赋值给SpringApplication的initializers属性
prepareEnvironment:装配spring环境信息
用于调用项目中自定义的执行器XxxRunner类,使得在项目启动完成后立即执行一些特定程序
通过定义过滤器,再解析@componentScan注解进行扫描时,哪些需要生成bd注入到IOC容器
getRunListeners(args):创建多播器,然后跟监听器绑定关系
默认情况底层创建的为AnnotationConfigServletWebServerApplicationContext容器对象,需要注意该对象在通过构造函数创建时,帮我们初始化了reader和scanner两个阅读器
方法过程
run(args)
添加各种监听器,来响应springBoot初始化过程中发布的各类事件
spring内部bean,比较典型的有以下几种:(1)ConfigurationClassPostProcessor:用来解析主配置类,是生成bean对象的关键(2)AutowiredAnnotationBeanPostProcessor:处理@Autowired注解(3)CommonAnnotationBeanPostProcessor:处理@PostConstruct,@PreDestroy 和 @Resource等注解
callRunners:执行所有的Runners。ApplicationRunner和CommandLineRunner接口的实现类
将我们的配置文件yaml通过事件监听的方式来进行解析,封装成一个propertySources,然后加载到Environment中
在这里会执行相当于spring初始过程中的this()方法 来初始化一些spring内部使用类和环境信息
该步骤完成后,整个ioc容器就已经刷新完毕,直接调用的spring refresh方法
设置引导上下文(单一职责),实际上它也是一个IOC容器,可以看到其接口也定义了获取Bean的方法。它的作用就是在启动阶段,创建一个引导性质的容器,在ApplicationContext完全创建好之前先去负责一些初始化操作,负责启动和准备环境(Environment)的一些操作,真正容器创建完成后会关闭。
方法结果
springboot默认情况下各配置文件的优先级
包含一个非常关键的操作:将启动类注入容器,为后续开启自动化配置奠定基础。并且会将引导上下文(bootstrapContext)进行关闭
ClassPathBeanDefinitionScanner:用来定义扫描我们classpath下的自定义的的bean对象的过滤拦截器
填充listener集合
从META-INF/spring.factories中读取Key为org.springframework.boot.SpringApplicationRunListener的Values,默认实现为EventPublishingRunListener,该类核心就是初始化多播器,发布各种事件
加载完成后的结果
其作用就是帮我们创建一个多播器并且把之前初始化到listeners集合中的监听器加载到多播器中使其能够正常监听发布的各种事件
用来初始化引导上下文
createApplicationContext():创建应用上下文对象(SpringIOC容器)
refreshContext:刷新应用上下文 完成Spring容器的初始化
具体如下图
AnnotatedBeanDefinitionReader:初始化一些spring内部提供的bean对象,用来解析配置类进而生成所有符合条件的bd
加载spring.factories文件中的BootstrapRegistryInitializer,赋值给SpringApplication的bootstrapRegistryInitializers属性
new SpringApplication(primarySources):创建SpringApplication对象
加载配置在spring.factories文件中的ApplicationListener,赋值给SpringApplication的listeners属性
createBootstrapContext():创建引导上下文
prepareContext:在容器刷新之前的准备动作
再真正的容器刷新前(refresh方法),给开发者一个容器扩展机会
收藏
收藏
0 条评论
下一页