1. SpringBoot程序入口(工程引导类入口)是注解@SpringBootApplication

2. @SpringBootApplication注解底层封装了三个注解:
@SpringBootConfiguration:该注解与@Configuration注解作用相同,来声明是一个配置类。
@EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。
@ComponentScan :组件扫描,默认扫描当前引导类所在包及子包,默认不会扫描引用包。

3. 在@EnableAutoConfiguration注解中底层封装了一个@Import注解,而@Import注解中指定的是一个ImportSelector的一个实现类(AutoConfigurationImportSelector),这个实现类实现了String[]selectImports(...)方法,此方法返回的是一个String数组,数组中封装的是要导入到Spring IOC容器中的类的全类名。

4. 在 3 中ImportSelector的实现类实现的String[]selectImports(...)方法中,加载了以下两个文件,(而SpringBoot3.x.x以后,只加载org.springframework.boot.autoconfigure.AutoConfiguration.imports文件)。

5. 所有要导入的配置类都声明在org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中,文件包含的是配置类的全类名,配置类中可以通过@Bean注解声明一个个的Bean对象。最终SpringBoot启动的时候,就会加载配置文件中的一个个配置类,然后将配置类的信息封装到String[]selectImports(...)方法返回的数组中,最后通过@Import(AutoConfigurationImportSelector.class)将配置类加载到IOC容器中,交给IOC容器进行管理。(注意并不是全部注册为IOC容器的Bean)。

6. SpringBoot自动配置时注意并不是全部注册为IOC容器的Bean,SpringBoot会根据@Conditional注解条件装配,如下需要先进行条件判断(如有的类出现时才生成Bean):
