💡 运用多态思想、@ConditionalOnProperty 注解
✅ 为符合使用直觉,现已将MongoDBService接口重命名为FileStorageService
✅ 以下FileStorageService便是指以前的MongoDBService
一、重新实现FileStorageService接口
1.查看材料管理代码可以看到,其实系统中所有的业务功能使用文件存储服务都是通过调用FileStorageService接口中定义的方法完成的。
2.FileStorageService接口目前有一个实现类MongoDBServiceImpl,这里面通过对mongoDB进行操作实现了具体的服务逻辑。
3.考虑不修改原代码,我们决定新写一个实现类ObsServiceImpl实现FileStorageService接口,在该实现类操作Obs来实现接口中的服务方法。
二、多实现情况选择性注入实现类
1.ObsServiceImpl完成后,需要解决注入选择问题。Spring会发现两个FileStorageService的实现类,它不知道去实例化哪一个来作为实际业务逻辑Bean。
2.网上方法很多,我们期望各个子系统只需要在一个地方进行配置即可决定系统使用mongo或obs实现文件存储服务。最适合我们的是使用条件注解中的***@ConditionalOnProperty***,通过配置来控制类是否加入Spring的IOC容器:
第一个参数表示读取的配置文件的key,第二个参数表示的是满足什么值才加入IOC。
3.为适配暂未有改造计划的子系统,避免每个系统都改配置文件,可以在MongoDBServiceImpl上使用@ConditionalOnProperty另一个参数:
第三个参数表示配置缺失时是否默认加入IOC。