Springboot启动分为三个部分:
1、初始化阶段
此阶段会创建一个SpringApplication实例,并设置实例的资源、环境、监听器、构造器。
2、应用启动过程
该阶段会创建监听器模块、创建并设置环境实例(如果是servlet容器的话返回StandardServletEnvironment,其他返回StandardEnvironment)、设置banner、构建应用上下文对象。
refreshContext()类似于Spring启动阶段,创建容器,加载bean到定义,加载bean等等,不过多了一个自动化配置内容。
3、自动化配置
@SpringBootApplication继承了@EnableAutoConfiguration注解,该注解导入了一个AutoConfigurationImportSelector.class实例,该类会扫描类路径上的jar包,如果在META-INF/下有spring.factories文件,它就会通过SpringFactoriesLoader.loadFactoryNames方法加载这个文件中的全路径类名到spring容器中。
loadFactoryNames()需要类加载器和全路径类名才能加载一个类。