我希望有一个委托(delegate)者可以根据字符串条件切换自动连线服务(我对该字符串没有任何影响)。
我如何实现这样的逻辑?我想到了委托(delegate)类,但这引入了几个问题: - 我无法注入(inject)同一父类型的多个服务 - 我会注入(inject)所有服务,但大多数服务都不会被使用,因为始终只应选择一项服务。
服务也应该获得一个PROTOTYPE
范围。
我如何改进以下设计?
@Service class AbstractService;
@Service class FirstService extends AbstractService;
@Service class SecondService extends AbstractService;
@Service class ThirdService extends AbstractService;
...
@Controller
class Delegator {
@Autowired FirstService first;
@Autowired SecondService second;
@Autowired ThirdService third;
public AbstractService delegate(String condition) {
switch(String s) {
case caseA: return FirstService; break;
case caseX: return SecondService; break;
case caseY: return ThirdService; break;
}
}
}
最佳答案
您应该能够做到这一点(假设所有服务都是单例范围):
class Delegator {
@Autowired
private Map<String, YourService> services;
}
让 Spring 通过 bean 名称(字符串键)在映射中注入(inject)所有服务。
现在,如果您确实需要注入(inject)原型(prototype)范围的服务,请查看此 link寻求想法。
关于java - 根据条件切换自动连线服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21412119/