我希望有一个可以根据字符串条件切换自动服务的委托人(我对该字符串没有任何影响)。
我怎么能实现这样的逻辑?我想到了一个委托者类,但这引入了几个问题: - 我无法注入同一父类型的多个服务 - 我会注入所有服务,但大多数服务都没有使用,因为总是只应选择一项服务。
服务也应该有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;
}
}
}
答案 0 :(得分:2)
您应该能够做到这一点(假设所有服务都是单一作用域):
class Delegator {
@Autowired
private Map<String, YourService> services;
}
让Spring在地图中按bean名称(String键)注入所有服务。
现在,如果你真的需要注入原型范围的服务,请查看这个link的想法。
答案 1 :(得分:0)
您可以将YourService列表注入您的委托人,并在您的委托方法中决定要调用哪个服务。
Spring安全性只是一个示例,您可以在其中找到(Authentication)Manager - &gt;的实现。 (身份验证)提供者模式。
这个循环遍历所有提供程序,但如果您可以控制代码,则很容易更改。