java - 根据条件切换自动连线服务?

标签 java spring dependency-injection autowired

我希望有一个委托(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/

相关文章:

java - 未为类型 Part 定义方法 getSubmittedFileName()

java - 使用 JXL 一次将多个数据插入到 Excel 工作表中

java - 如何在 spring 中以声明方式将(绑定(bind))对象放入 jndi?

ios - iOS 中的多个主题模式处理

java - 如何让 Google GIN 在 DevMode 下与 Google-Eclipse 插件配合使用?

java - 错误:Exception in thread "main" java. lang.OutOfMemoryError:Java堆空间

java - 在同一事务中更新两个对象

java - Tomcat 部署中与 Spring 持久性相关的错误

angular - Angular APP_INITIALIZER 工厂中的 InjectionToken

java - Erlang OTP 监督 Java 应用程序