@AutoConfigurationPackage注解的意义

AutoConfigurationPackage注解代码如下:

1
2
3
4

@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {}

这个注解的功能是:

  1. 利用Register给容器导入一系列组件
  2. 将指定的包下的所有组件导入进来(MainApplication所在的包下)

这个注解存在的意义是,一个一个的导入组件,代码量太大了,而且不太优雅。

@Import(AutoConfigurationImportSelector.class)这行代码做了什么?

  1. 利用getAutoConfigurationEntry(annotationMetadata)给容器中批量导入一些组件

  2. 调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类

  3. 利用工厂加载Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader)得到所有的组件

  4. 从META-INF/spring.factories位置来加载一个文件。

    • 默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
    • spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories