Spring Boot启动源码
2020-11-18 18:38:06 19 举报
Spring启动源码
作者其他创作
大纲/内容
configureHeadlessProperty();
createApplicationContext();
springApplicationRunListeners.started(context);
准备启动环境
prepareEnvironment
从容器中获取,并执行
switch (this.webApplicationType)
生命周期第四个监听点此时实例化容器,还没启动
SpringApplication(primarySources).run(args)
ConfigurationPropertySources.attach(environment);
去配置文件获取SpringApplicationRunListener.class
SpringApplicationRunListeners.environmentPrepared(environment)
设置ApplicationListener.class监听器
setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
生命周期第六个监听点此时已经启动容器
postProcessApplicationContext(context);
start
推断主构造类
启动容器
推断启动类型web/app/webflux
ApplicationContextInitializer.initialize(context)
exceptionReporters
listeners.starting();
new DefaultApplicationArguments(args)
注册主程序类到容器中
Spring boot 在这里的Web容器重写了onRefresh();判断当前是否是内嵌的tomcat,如果是内嵌的tomcat就启动一个内嵌的tomcat
启动SpringApplicationRunListener
初始化一个图形化界面的组件
生命周期第二个监听点负责监听环境的准备并且去读取application.yml
new SpringApplcation(Application.class)
将ConfigurationPropertySources里面的配置进行合并
CommandLineRunner.run()
BeanUtils.instantiateClass
培植一些需要忽略的Bean
包装args成一个对象
springApplicationRunListeners.contextLoaded(context);
end
注册监听器到容器中
将环境绑定到SpringApplication里
生命周期第七个监听点此时已经启动容器
prepareContext
this.mainApplicationClass = deduceMainApplicationClass();
ApplicationRunner.run()
context.setEnvironment(environment);
初始化异常打印信息
printBanner(environment);
生命周期第八个监听点此时已经启动容器,并且执行完所有的监听点
设置 ApplicationContextInitializer.class 的监听器
springApplicationRunListeners.contextPrepared(context);
afterRefresh
通过获取 new RuntimeException().getStackTrace(); 获取方法调用栈,然后循环获取启动main的类
创建一个ApplicationContext
一个时间工具类,记录启动时间
this.webApplicationType = WebApplicationType.deduceFromClasspath();
getRunListeners(args);
configureIgnoreBeanInfo(environment);
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
contextClass = Class.forName()
全都初始成一个ConfigurableApplicationContext容器
refreshContext(context)
打印Banner
applyInitializers(context);
StopWatch stopWatch = new StopWatch();
生命周期第三个监听点此时实例化容器,还没启动
对context进程了后置处理,注入了一一些Bean组件
无处理
configureEnvironment()
生命周期第五个监听点此时已经启动容器
根据不同类型生成不同的容器
配置环境
生命周期第一个监听点,此时还没准备好环境
getOrCreateEnvironment()
bindToSpringApplication(environment)
0 条评论
下一页