SpringBoot 程序的启动流程
调用过程
各方法的调用顺序
具体实现
1、main方法启动:
2、新建对象并调用run方法
3、构造方法中的主要功能是实例化所有的ApplicationContextInitializer和ApplicationListener实现类
调用Spring的方法拿到所有的上述两个类的类名
通过反射实例化所有的类对象并返回
4、调用run方法
以同样的方式实例化所有的SpringApplicationRunListener并以此返回的对象列表构建SpringApplicationRunListeners对象
然后调用starting方法里面会循环调用所有SpringApplicationRunListener的starting方法
5、构建配置环境
里面配置了PropertySources和Profiles;
该方法执行完后会触发ApplicationListener的onApplicationEvent方法
然后调用所有SpringApplicationRunListener的environmentPrepared方法
6、调用prepareContext
首先调用applyInitializers,里面调用了所有ApplicationContextInitializer的initialize方法
然后调用所有SpringApplicationRunListener的contextPrepared方法;
之后注册指定的几个单例的bean
最后调用所有SpringApplicationRunListener的contextLoaded方法
7、装载bean(to be continue)
8、方法调用及各个程序的启动
调用所有SpringApplicationRunListener的started方法;
调用所有ApplicationRunner 和 CommandLineRunner的run方法;
最后调用所有SpringApplicationRunListener的running方法
EnvironmentPostProcessor
上面知道了在设置完environment之后会触发所有listener的onApplicationEvent方法,这里有一个比较特殊的实现ConfigFileApplicationListener
获取所有的EnvironmentPostProcessor,然后循环调用postProcessEnvironment