最近在写一个功能时,一个接口有多个实现,要求在service实现类的调用要根据配置文件进行调整,不同的配置,调用不同的处理方式,下面就写个例子,做一下记录吧
首先,做好yaml文件的配置
my-config:
#集成方式:轮询polling/回调callback
integrate-mode: polling
创建service接口类
public interface MyTransService {
void dealFile(String filePath);
}
创建两种类,实现上诉接口,在加@Service注解的时候,添加上这个实现类的实例名
轮询方式
@Service("polling")
public class OfficeTransServiceImpl implements MyTransService {
@Override
void dealFile(String filePath){
// do something ···
}
}
回调方式
@Service("callback")
public class PoiTransServiceImpl implements MyTransService {
@Override
void dealFile(String filePath){
// do something ···
}
}
接下来就是怎么调用啦
调用的话使用的是@Resource注解,这个注解的name属性,可以取到配置文件中的值
@Service
public class MyServiceImpl {
@Resource(name = "${my-config.integrate-mode}")
private MyTransService myTransService ;
public void dealFile() {
officeTransService.dealFile();
}
}
这样,就能够根据具体的配置,控制具体调用哪个实现啦!
PS:@Resource除了读取配置文件这种方式去决定调用哪个类,还可以将配置写死,如果不需要根据配置去改变,可以使用下面两种方式,但是要切换的话就要通过改代码来实现了:
方式一:@Resource(name="polling")
方式二:@Autowired @Qualifier("polling")
对你有帮助就点个赞呗~~