SpringBoot启动流程
2024-10-28 14:38:26 0 举报
AI智能生成
SpringBoot启动流程
作者其他创作
大纲/内容
SpringApplication对象初始化
推断web应用类型
通过判断类路径中是否存在相应的类来推断
获取BootstrapRegistryInitializer对象
1、从"META-INF/spring.factories"中读取key为BootstrapRegistryInitializer类型的扩展点,并实例话出对应的扩展对象;
2、BootstrapRegistryInitializer的作用是可以初始化BootstrapRegistry;
3、BootstrapRegistry可以用来注册一些对象,这些对象可以用在SpringBoot启动到Spring容器初始化完成的过程中;
4、没有Spring容器之前就用BootstrapRegistry来共享一些对象,有了Spring容器就用容器来共享对象。
获取ApplicationContextInitializer对象
1、从"META-INF/spring.factories"中读取key为ApplicationContextInitializer类型的扩展点,并实例话出对应的扩展对象;
2、ApplicationContextInitializer是用来初始化Spring容器ApplicationContext对象的;
初始化的三种方式
classpath 路径下的META-INF/spring.factories 文件中填写接口和实现类的全名,多个实现的话用逗号分隔
Spring Boot 启动代码中手动添加初始化器
application.properties 中配置 context.initializer.classes,多个用逗号分开
SpringBoot的ApplicationContextInitializer内置实现
ServerPortInfoApplicationContextInitializer:目的是为容器添加监听器
ConfigurationWarningsApplicationContextInitializer:配置日志(是通过增加bean的后置处理器)
DelegatingApplicationContextInitializer:获得application.properties 中配置的 context.initializer.classes,将其作为初始化器进行加载和执行
ContextIdApplicationContextInitializer:设置Spring 应用上下文 ID
进阶使用
获取bean信息
注意:目前获取到的是Spring框架自身初始化需要用到的bean信息,我们自身写的bean并未初始化。
激活配置文件
注册bean后置处理器:具体看ConfigurationWarningsApplicationContextInitializer
注册单例bean
获取监听器
从META-INF/spring.factories中加载类型为ApplicationListener的监听器
赋值给SpringApplication的listeners属性
设置main方法
从调用栈中找出main方法所在的Class赋值给SpringApplication的属性mainApplicationClass
run()方法
创建DefaultBootstrapContext对象
作用:用来注册一些对象
利用BootstrapRegistryInitializer来初始化DefaultBootstrapContext
获取SpringApplicationRunListener对象
从META_INF/spring-factories中获取SpringApplicationRunListener这个key的实例
调用SpringApplicationRunListener#starting()方法
创建Environment对象
子集
当前操作系统的环境变量
JVM的一些配置信息
-D方式所配置的JVM环境变量
调用SpringApplicationRunListeners#environmentPrepared()方法
默认EnvironmentPostProcessorApplicationListener来消费这个事件,而ApplicationListener接收到这个事件之后,
就会解析 application.properties、application.yml文件,并添加到Environment对象中去
打印banner
创建Spring的ApplicationContext
servlet环境:ServletWebServerApplicationContext
准备容器工作
刷新容器
进入Spring容器的refresh那一套
调用SpringApplicationRunListeners的started方法
0 条评论
下一页