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的值加入到了容器中