背景
笔者所在项目组在搭建一个全新项目的时候选用了SpringBoot3.x
,项目中应用了很多SpringBoot2.x
时代相关的第三方组件例如baomidou
出品的mybatis-plus
、dynamic-datasource
等。在配置好相关依赖、最小启动类和配置之后,发现项目无法启动。于是根据启动上下文日志和按行DEBUG
找到原因并且在等待组件升级兼容之前进行临时性解决。
关于spring.factories
spring.factories
其实是SpringBoot
提供的SPI
机制,底层实现是基于SpringFactoriesLoader
检索ClassLoader
中所有jar
(包括ClassPath
下的所有模块)引入的META-INF/spring.factories
文件,基于文件中的接口(或者注解)加载对应的实现类并且注册到IOC
容器。这种方式对于@ComponentScan
不能扫描到的并且想自动注册到IOC
容器的使用场景十分合适,基本上绝大多数第三方组件甚至部分spring-projects
中编写的组件都是使用这种方案。
spring.factories
文件的格式大致如下: