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方法去解析 加载到容器中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异