title: SpringBoot2.StartProcess.depth
StartProcess提纲
昨天了咱们把大的过程说了一下,今天咱们把细化的过程详细写写。
之后再根据这几个细化过程,继续来一遍深入的源码解读。
一点关于源码阅读的心得就是先看大架构布局,然后细看各个组成模块。
明白各个模块用到的技术
通过上面的方式去看源码其实是很轻松的一件事情。
可能有人会说了,他妈的就是不知道才去看源码的呀
知道还看源码干啥
其实哦这样说也能理解,不过难道不可以看看官方文档明白架构?
不能看看别人的博客吸取的经验,然后再去看源码?
有些事情能站在别人的肩膀上就在别人肩膀上,时间就是生命就是金钱。
看源码的动力,你可以认为每弄懂一个框架。
年薪就能加10W
等超牛逼了年薪百万小问题,顺带着还有超强的成就感。
最屌的是能出名呀
粉丝一大堆的感觉真爽,还能帮助社区的发展。
启动监听器
在run方法中有下面两句代码
SpringApplicationRunListeners listeners = getRunListeners(args);
listeners.starting();
咱们先看一下getRunListeners
代码如下
private SpringApplicationRunListeners getRunListeners(String[] args) {
Class<?>[] types = new Class<?>[] {
SpringApplication.class, String[].class };
return new SpringApplicationRunListeners(logger, getSpringFactoriesInstances(
SpringApplicationRunListener.class, types, this, args));
}
上面的代码还是通过getSpringFactoriesInstances这个方法去Spring.factories配置文件拉取监听器通过反射实例化对象
该处实例化的class是EventPublishingRunListener,事件发布监听器
接着就是将它Starting
继续看下代码
@Override
public void starting() {
this.initialMulticaster.multicastEvent(
//关键代码,这里是创建application启动事件ApplicationStartingEvent
new ApplicationStartingEvent(this.application, this.args));
}
其中有这么一