什么是 spring.factories ?

位于 jar 的 resources/META-INF/spring.factories

它是一个 properties 文件
key 声明的是一个接口; value 声明的是这个接口的实现类, 多个值用逗号分隔

简单来说: :::info spring.factories 文件包含了一些接口相对应的实现类的配置.
我们通过这些配置就可以知道接口有哪些可选的实现类, 并通过反射获取对应的实例对象.
这种模式很像简单工厂模式, 因此叫做 spring.factories. :::

SpringFactoriesLoader

SpringFactoriesLoader 实现了检索 spring.factories 并获取指定接口配置的功能

  • loadFactories 根据接口类获取其实现类的实例, 返回的是对象列表
  • loadFactoryNames 根据接口获取其接口类的名称, 返回的是类名的列表

@EnableAutoConfiguration 自动装配

在 spring.factories 配置 @EnableAutoConfiguratio 的值为要自动装配的类, 就可以实现自动装配.
这些自动装配类, 不需要被 @ComponentScan 扫描到.

@EnableAutoConfiguration 实现的关键在于引入了 AutoConfigurationImportSelector
2022-05-21 14-38-40 的屏幕截图.png

:::info AutoConfigurationImportSelector 会找到 spring.factories 中 @EnableAutoConfiguratio 的所有值, 并将所有符合条件的配置类注入到 IoC 容器中.
AutoConfigurationImportSelector 的核心方法是 selectImports. :::

image.png

实现自己的自动装配

1, 实现配置类
image.png

2, 配置 spring.factories
image.png