Spring Boot 自动装配原理

在spring boot中 需要使用第三方的一些功能 比如jpa,mybtis,security 只需要引入依赖既可以完成三方依赖配置
主要原理其实就是通过spring boot的spi机制 扫描出所有spring.factories文件 解析其中的键值 获取所有依赖的配置类 再根据order 排序加入spring 容器中 既可以完成

spring-boot 中如何完成的呢

众所周知 springboot 应用的启动类 也是一个配置文件
在@springbootapplication 中有一个@EnableAutoConfiguration注解 这个注解有使用到一个@Import(AutoConfigurationImportSelector.class) 导入一个AutoConfigurationImportSelector类 这个类实现了一个ImportSelector接口 在该接口实现中会通过一个springfactories的工具类去扫描出所有依赖下mate-inf下的spring.factories文件 解析出所有配置类的类路径

      //getSpringFactoriesLoaderFactoryClass()=org.springframework.boot.autoconfigure.EnableAutoConfiguration
	protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
		List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
				getBeanClassLoader());
		Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
				+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}

最终这些配置类 会在一个BeanDefinitionRegistryPostProcessor的实现类ConfigurationClassPostProcessor中通过ConfigurationClassParser类的parse方法去解析 加载到容器中

posted @ 2022-12-01 11:37  yangqifang  阅读(289)  评论(0编辑  收藏  举报