SpringBoot 利用SPI机制 实现自动装配,如项目中使用FastDFS只要引入依赖,配置会自动被实例。
根据业务需求,某些服务器只使用minio、某些服务只使用fastdfs。要实现即使导入了依赖也不会自动装配,而是根据环境自动装配。
实现自动装配
以 fastdfs-client实现自动装配为例,通常情况下自动装配会在META-INF/spring.factories 定义扫描类的路径,通过源代码查看核心代码如下:
关闭默认的自动装配
SpringBoot 有两种方式关闭默认的自动装配,根据业务需要关闭默认的自动装配
第一种启动类配置:
@SpringBootApplication(exclude={FdfsClientConfig.class})
第二种配置文件配置:
spring.autoconfigure.exclude: com.github.tobato.fastdfs.FdfsClientConfig
根据环境自动装配
核心是通过@Conditional动态注册bean,配置文件中添加以下配置:
# 文件服务器类型(minio、fastdfs)
file.type:minio
fastdfs配置类
@Component
@Import(FdfsClientConfig.class)
@ConditionalOnProperty(name = "file.type", havingValue = "fastdfs")
public class FastDFSConfig {
}
minio配置类
@Component
@Import(MinioConfigs.class)
@ConditionalOnProperty(name = "file.type", havingValue = "minio")
public class MinioConfig {
}
实现效果如下,配置文件file.type指定minio将会注册Minio配置类,指定fastdfs会注册fastdfs配置类。