1.构建SpringApplication实例对象,在实例初始化的时候
- 根据classpath里面是否存在某个特征类(org.springframework.web.context.ConfigurableWebApplicationContext)来决定是否应该创建一个为Web应用使用的ApplicationContext类型。
- 使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitializer。
- 使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationListener。
- 推断并设置main方法的定义类。
- 配置source
2.获取构造器工厂对象,遍历所有通过SpringFactoriesLoader可以查找到并加载的SpringApplicationRunListener,启动开始方法,监听器可以知晓启动已经开始。
3.创建当前springBoot项目将要用的的Environment(包括配置要使用的PropertySource以及Profile)。
4.遍历调用所有SpringApplicationRunListener的environmentPrepared()的方法,告诉他们:当前SpringBoot应用使用的Environment准备好
5.将之前准备好的Environment设置给创建好的ApplicationContext使用,创建好上下文
6.遍历调用所有SpringApplicationRunListener的contextPrepared()方法,监听器客知晓上下文已经准备好
7.最核心的一步,将之前通过@EnableAutoConfiguration(八爪鱼)获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContext,
8.遍历调用所有SpringApplicationRunListener的contextLoaded()方法。
9.最后refresh()方法,完成IOC的容器可用。