第一步
使用的版本为2.1.3 和1.x的版本有点区别不过差别不大
启动SpringBoot,进入复合注解@SpringBootApplication
进入@EnableAutoConfiguration
在通过@Import
进入EnableAutoConfigurationImportSelector
类 进入他的父类AutoConfigurationImportSelector
第二步
进入AutoConfigurationImportSelector
类的 getAutoConfigurationEntry
方法 查看这行代码
List<String> configurations = getCandidateConfigurations(annotationMetadata,
attributes);
进入该方法getCandidateConfigurations
查看这行代码
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
进入该方法loadFactoryNames
调用了 loadSpringFactories
在该方法中有行代码调用了成员变量FACTORIES_RESOURCE_LOCATION
该成员变量默认调用了META-INF/spring.factories
所以会自动扫描该文件中的类进行自动装配扫描
Enumeration<URL> urls = (classLoader != null ?
classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
第三步
之后通过扫描proerties将 文件中的键值对 加入 LinkedMultiValueMap
中,这是一个一键多值的集合类