1. 当启动Springboot应用程序时,会先创建SpringApplication对象,在对象的构造方法中进行一些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器,在这个过程中会加载应用程序的spring.factories文件,将文件的内容放到缓存对象中,方便后续获取。
    2. SpringApplication对象创建完后,开始执行run方法来完成整个启动,启动过程中最主要的有两个方法,第一个叫prepareContext,第二个叫refreshContext,在这两个关键步骤中完成了自动装配的核心功能,前面的处理逻辑包含了上下文对象的创建,banner的打印,异常报告期的准备等各个准备工作,方便后续进行调用。
    3. 在prepareContext 方法中主要完成的是对上下文对象的初始化操作,包括了属性的设置,比如环境对象,在整个过程中有一个非常重要的方法,load,通过load将当前启动类作为一个beanDefinition注册到register中,方便后续在进行BeanFactoryPostProcessor调用执行的时候,找到对应的主类,来完成@springBootApplication 和 @EnableAutoConfigurationD的注解的解析工作。
    4. 在refreshContext方法中会进行整个容器的刷新过程,会调用spring中refresh方法,refresh中有13个关键的方法,来完成整个spring应用程序的启动,在自动装配过程中,会调用invokeBeanFactoryPostProcessors方法,在此方法中主要对ConfigurationClassPostProcessor类的处理,在调用的时候会调用ConfigurationClassParser解析@PropertySource、@ComponentScan、@Import、@ImportResource 、@Bean 等注解,最重要的是@Import注解的解析。
    5. 在解析@Import注解的时候,会有一个getImports的方法,从主类开始递归解析注解,把所有的@Import注解都解析到,然后在processImport方法中对import的类进行分类,此处主要是处理AutoConfigurationImportSelector类,来完成EnableAutoConfigration的加载。