【发布时间】:2017-07-17 09:53:19
【问题描述】:
我正在努力寻找解决问题的最佳方法。
我需要根据一个变量值在其中几个列表中选择一个服务接口(及其具体实现)。
具体实现扩展了一个抽象类。
所以我有
public abstract class AbstractService {
public void method1(){
//do stuff
}
public void method2(){
//do stuff
}
}
那么我们有
public interface Service1{
void method1();
void method2();
void method3();
void method4();
}
public interface Service2 implements Service{
void method1();
void method2();
void method3();
void method4();
}
public interface ServiceN implements Service{
void method1();
void method2();
void method3();
void method4();
}
最后是实现
@Service
public class Service1Implementation extends AbstractService implements Service1 {
}
@Service
public class Service2Implementation extends AbstractService implements Service2 {
}
@Service
public class ServiceNImplementation extends AbstractService implements ServiceN {
}
现在,例如,我需要在控制器中根据变量值来决定我需要哪个服务。
我的想法是自动装配控制器中的所有服务接口,然后执行类似的操作
@Controller
public class Controller{
@Autowired Service1 service1;
@Autowired Service2 service2;
//...
@Autowired ServiceN serviceN
@GetMapping("/")
public String myController(){
int variable;
switch(variable){
case 1:
service1.method()1;
break;
case 2:
service2.method1();
//....
break;
case n:
serviceN.method1();
break();
return "template";
}
}
它可以工作...但是我有几个服务类扩展了抽象类,它看起来不像是一个做得很好的工作流,有没有办法以更轻松的方式拥有它?
【问题讨论】:
-
Service1、Service2、Service3之间没有通用接口? -
不在此配置中,但我可以创建它,您的意思是所有其他人都实现的单个接口?那么我该如何决定我需要调用哪个服务呢?
-
如果你能做到,我可以写一个依赖它的答案。但我不明白
getService()的逻辑。它在正确的实例上调用method1(),而方法名称为getService()。不是很清楚。 -
对不起,我会说得更清楚