【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】
OK, 接着上次我们已经把
这个东西了解得差不多了
就是前面这一段,它初始化了SpringBoot 程序的启动的所有相关配置
接下来就是看后面的run 方法了,点进去
运行整个过程 → 初始化容器【但是过程没那么简单】
ConfigurableApplicationContext
这是run 方法的返回值
一行一行的来看
StopWatch stopWatch = new StopWatch();
计时器
就是这样来的【所以,之前的初始化操作都没有算到显示给我们看的那个时间中【假象】】
【设置了计时器】
stopWatch.start();
【计时器开始】
DefaultBootstrapContext bootstrapContext = this.createBootstrapContext();
【系统引导信息对应的上下文对象】
ConfigurableApplicationContext context = null;
【定义了一个对象】
this.configureHeadlessProperty();
【模拟输入输出信号,避免出现因缺少外设导致的信号传输失败,进而引发错误(模拟显示器、键盘、鼠标…)】
【java.awt.headless = true;】
SpringApplicationRunListeners listeners = this.getRunListeners(args);
【获取当前注册的可运行的监听器】
listeners.starting(bootstrapContext, this.mainApplicationClass);
【监听器执行了对应的操作步骤】
到这里其实还是一些准备性的工程,还没开始创建容器
ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
【获取参数】
ConfigurableEnvironment environment = this.prepareEnvironment(listeners, bootstrapContext, applicationArguments);
【将前期读取的数据加载成了一个环境对象,用来描述信息】
this.configureIgnoreBeanInfo(environment);
【做了一个配置,备用】
Banner printedBanner = this.printBanner(environment);
【初始化启动图标】
context = this.createApplicationContext();
【创建容器对象,根据前期配置的容器类型进行判定并创建】
context.setApplicationStartup(this.applicationStartup);
【设置启动模式】
this.prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);
【对容器进行设置,参数来源于前期的设定】
this.refreshContext(context);
【刷新容器环境】
this.afterRefresh(context, applicationArguments);
【刷新完毕后,做后处理】
stopWatch.stop();
【计时结束】
if (this.logStartupInfo) {
(new StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(), stopWatch);
}
【判定是否记录启动时间的日志】【创建日志对应的对象,输出日志信息,包含启动时间】
listeners.started(context);
【监听器执行了对应的操作步骤】
listeners.running(context);
【监听器执行了对应的操作步骤】
到这儿就结束了
OK, 回顾一下
【两个阶段】
【监听器类型】
李老师牛逼!!!!!!!!!!!!!!!!!!!!!【微服务我来啦!】