SpringBoot
【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】
SpringBoot 原理篇
文章目录
- SpringBoot
- SpringBoot 原理篇
- 3 核心原理
- 3.4 启动流程【3】
- 3.4.1 看源码咯
3 核心原理
3.4 启动流程【3】
3.4.1 看源码咯
上次看到这儿了
接着往下看
this.bootstrapRegistryInitializers = this.getBootstrapRegistryInitializersFromSpringFactories();
这个就厉害了
进去这个方法看看
OK,就在下面
private List<BootstrapRegistryInitializer> getBootstrapRegistryInitializersFromSpringFactories() {
ArrayList<BootstrapRegistryInitializer> initializers = new ArrayList();
this.getSpringFactoriesInstances(Bootstrapper.class).stream().map((bootstrapper) -> {
return bootstrapper::initialize;
}).forEach(initializers::add);
initializers.addAll(this.getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
return initializers;
}
解读一下:
- 创建集合、存放 BootstrapRegistryInitializer 对象
- 获得 getSpringFactoriesInstances 里面的信息【最终是完成一个add 操作】
- getSpringFactoriesInstances 将 BootstrapRegistryInitializer 类传进去
- 最后返回 initializers 集合对象
【总的说,这一句就是在获取系统配置引导信息】
再下来
this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
这里做了一系列的初始化,但是还不知道往哪儿用
【获取 ApplicationContextInitializer.class 对应的实例】
再下来
this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
【初始化监听器】
最重要的是第三个打印,【激活的事件】
每次调用监听,事件都不一样【对于SpringBoot 而言,它的整个初始化过程过于庞大】
可以指定一下监听的事件
这种非常巧妙的设计,它将SpringBoot 中可干预的地方既开放出来了,而且灵活性又强【用事件对象进行区分】
【SpringBoot 就是通过这种监听器的模式对它的初始化过程及其他的运行过程进行干预】
OK,再下来
this.mainApplicationClass = this.deduceMainApplicationClass();
【获取引导类的类名信息,后面备用】