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包
