SpringApplication 实例的创建 -变量initializers初始化

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

Application中的属性 执行前

1. this.getSpringFactoriesInstances(ApplicationContextInitializer.class)

2. getSpringFactoriesInstance()

非常重要 因为它里面有这样一个方法

SpringFactoriesLoader.loadFactoryNames(type, classLoader)

执行结束 ,names中含有路径

并且是来自两个jar包, 0-4 一个, 5-6一个 SPI机制实现

spring.factories中保存的是类路径

现在就可以根据类路径去实例化

3. SpringApplication# createSpringFactoriesInstances()

总结try中的步骤,这也是通过反射实例化一个类的过程
(1)有了类路径,通过反射获取Class对象
(2)有了Class对象,再拿到Constructor(类的构造器)
(3)有了Constructor,再去实例化,基本上是一个反射的中心概括。
3.1 根据类路径通过反射获取该Class对象
3.2 通过Class对象拿到构造器

3.3 根据构造器执行实例化

最终放入instances中,被赋于 this.initializers

这7个初始化器来自两个jar包

经验分享 程序员 微信小程序 职场和发展