SpringBoot 自动装配

SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装置进 SpringBoot。

自动配置原理

1). SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration
2). @EnableAutoConfiguration作用:
  • 过@import方式引入了EnableAutoConfigurationImportSelector
  • EnableAutoConfigurationImportSelector是一个ImportSelector,我们查看其selectImports方法,其内部调用getCandidateConfigurations方法,读取META-INF/spring.factories里配置的Configuration类。
  • 在SpringBoot的spring-boot-autoconfigure-版本.jar包中,spring.factories文件里预定义了很多Configuration类:
  • List<String> configurations = getCandidateConfigurations(annotationMetadata,arrtibutes)获取候选的配置

SpringFactoriesLoader.loadFactoryNames()
扫描所有jar包类路径下,META-INF/spring.factories
把扫描到的这些文件的内容包装成properties对象
从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中

将类路径下META-INF/spring.factories里面配置的所有EnableAutoConfiguration的值加入到了容器中

SpringBoot核心总结:
1.SpringBoot启动会加载大量的自动配置类
2.判断SpringBoot默认写好的自动配置类是否满足我们需求的功能
3.查看自动配置类到底配置了哪些组件(只要包含我们需求的组件,就不需要额外去添加配置属性了)
4.给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们可以自定义这些属性的值.