SpringBoot启动原理流程图
2022-02-24 15:54:36 0 举报
springboot启动流程
作者其他创作
大纲/内容
忽略beaninfo的bean
applyInitializers
打印Banner 横幅
记录启动时间点
拿到之前读取到所有ApplicationContextInitializer的组件, 循环调用initialize方法
文件夹目录下寻找资源
getOrCreateEnvironment
启动加载
Archive为统一访问资源的逻辑层
实例化boot重要类,初始化等等
prepareContext
读取完配置类后发送ApplicationPreparedEvent。
ConfigurationPropertySources.attach(environment);
ExplodedArchive
JarFileArchive
发布了ApplicationEnvironmentPreparedEvent 的监听器 读取了全局配置文件
发布了ApplicationContextInitializedEvent
打包插件
根据webApplicationType 创建Environment 创建就会读取: java环境变量和系统环境变量
Start-Class
prepareEnvironment
refreshContext(context)
xx.Application
启动类
context.getBeanFactory()
getSpringFactoriesInstances
bindToSpringApplication
listeners.starting();
configureIgnoreBeanInfo
预初始化环境: 读取环境变量,读取配置文件信息(基于监听器)
预初始化上下文
refresh
JarLauncher通过加载BOOT-INF/classes目录及BOOT-INF/lib目录下jar文件,实现了fat jar的启动SpringBoot通过扩展JarFile、JarURLConnection及URLStreamHandler,实现了jar in jar中资源的加载SpringBoot通过扩展URLClassLoader–LauncherURLClassLoader,实现了jar in jar中class文件的加载。
listeners.contextLoaded(context)
将@PropertieSource的配置信息 放在第一位, 因为读取配置文件@PropertieSource优先级是最低的
configureEnvironment
获取bean工厂
spring-boot-maven-plugin
Main-Class
createApplicationContext
调用启动方法Run
SpringBoot 如何通过jar包启动
将命令行参数读取环境变量中
将所有spring.main 开头的配置信息绑定SpringApplication
listeners.environmentPrepared
printBanner
在jar包环境下寻找资源
listeners.contextPrepared(context)
根据webApplicationType创建Spring上下文默认AnnotationConfigApplicationContext
发布1.ApplicationStartingEvent事件,在运行开始时发送
jar类加载器
org.springframework.boot.loader.JarLauncher
加载spring ioc 容器 **相当重要 由于是使用AnnotationConfigServletWebServerApplicationContext 启动的spring容器所以springboot对它做了扩展: // 加载自动配置类:invokeBeanFactoryPostProcessors , 创建servlet容器onRefresh
0 条评论
下一页