乐趣区

SpringApplication的初始化过程

SpringApplication 的初始化过程主要包括 4 部分,具体说明如下。

(1)this.webApplicationType = WebApplicationType.deduceFromClasspath()

用于判断当前 webApplicationType 应用的类型。deduceFromClasspath() 方法用于查看 Classpath 类路径下是否存在某个特征类,从而判断当前 webApplicationType 类型是 SERVLET 应用(Spring 5 之前的传统 MVC 应用)还是 REACTIVE 应用(Spring 5 开始出现的 WebFlux 交互式应用)

(2)this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class))

用于 SpringApplication 应用的初始化器设置。在初始化器设置过程中,会使用 Spring 类加载器 SpringFactoriesLoader 从 META-INF/spring.factories 类路径下的 META-INF 下的 spring.factores 文件中获取所有可用的应用初始化器类 ApplicationContextInitializer。

(3)this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class))

用于 SpringApplication 应用的监听器设置。监听器设置的过程与上一步初始化器设置的过程基本一样,也是使用 SpringFactoriesLoader 从 META-INF/spring.factories 类路径下的 META-INF 下的 spring.factores 文件中获取所有可用的监听器类 ApplicationListener。

(4)this.mainApplicationClass = this.deduceMainApplicationClass()

用于推断并设置项目 main() 方法启动的主程序启动类

学习让人快乐,学习更让人觉得无知!学了 1 个多月的《Java 工程师高薪训练营》,才发现自己对每个技术点的认知都很肤浅,根本深不下去,立个 Flag:每天坚持学习一小时,一周回答网上 3 个技术问题,把自己知道都分享出来。

退出移动版