根据条件切换自动服务?

时间:2014-01-28 17:07:05

标签: java spring dependency-injection autowired

我希望有一个可以根据字符串条件切换自动服务的委托人(我对该字符串没有任何影响)。

我怎么能实现这样的逻辑?我想到了一个委托者类,但这引入了几个问题: - 我无法注入同一父类型的多个服务 - 我会注入所有服务,但大多数服务都没有使用,因为总是只应选择一项服务。

服务也应该有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;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您应该能够做到这一点(假设所有服务都是单一作用域):

class Delegator {
    @Autowired
    private Map<String, YourService> services;
}

让Spring在地图中按bean名称(String键)注入所有服务。

现在,如果你真的需要注入原型范围的服务,请查看这个link的想法。

答案 1 :(得分:0)

您可以将YourService列表注入您的委托人,并在您的委托方法中决定要调用哪个服务。

Spring安全性只是一个示例,您可以在其中找到(Authentication)Manager - &gt;的实现。 (身份验证)提供者模式。

这个循环遍历所有提供程序,但如果您可以控制代码,则很容易更改。