Java 如何使用Spring进行参数化依赖项注入?

Java 如何使用Spring进行参数化依赖项注入?,java,factory-method,spring-ioc,Java,Factory Method,Spring Ioc,我想知道如何使用Spring依赖项注入解决以下问题: 考虑到我有一个不同类型的事务列表,我需要根据它们的事务类型来处理它们。因此,我需要一个TransactionController和TransactionService这样: public class TransactionController { private TransactionService transactionService; public void doStuff(List<Transaction>

我想知道如何使用Spring依赖项注入解决以下问题:

考虑到我有一个不同类型的
事务列表
,我需要根据它们的
事务类型
来处理它们。因此,我需要一个
TransactionController
TransactionService
这样:

public class TransactionController {
    private TransactionService transactionService;
    public void doStuff(List<Transaction> transactions) {
        for (Transaction transaction : transactions) {
            // use the correct implementation of transactionService based on the type
            transactionService.process(transaction);
        }
    }
}

public interface TransactionService {
    void process(transaction);
}
如何通过
TransactionService
实现同样的功能?我不能使用
@限定符
注释,因为实现取决于
事务类型
。我偶然发现了spring文档中的一篇文章,其中展示了使用工厂方法的实例化,但我不知道如何向它传递参数

我相信我可能不得不在春季奥运会上使用不同的设计。我想,因为我一直使用简单工厂、工厂和抽象工厂模式,所以我看不到解决这个问题的不同方法


有人能帮我格式化一下吗?android应用程序似乎没有做到这一点,对不起

在这种情况下,工厂模式或类似模式是正确的解决方案,IMHO。只需实现一个factory/registry/locator对象,并使用Spring注入该对象。其余的和往常一样。
注入发生在对象创建时,但在运行时需要不同的服务实现。在这种情况下,只有服务定位器、工厂模式或类似模式才有意义。

在这种情况下,工厂模式或类似模式是正确的解决方案,IMHO。只需实现一个factory/registry/locator对象,并使用Spring注入该对象。其余的和往常一样。
注入发生在对象创建时,但在运行时需要不同的服务实现。在这种情况下,只有服务定位器、工厂模式或类似模式才有意义。

在这种情况下,工厂模式或类似模式是正确的解决方案,IMHO。只需实现一个factory/registry/locator对象,并使用Spring注入该对象。其余的和往常一样。
注入发生在对象创建时,但在运行时需要不同的服务实现。在这种情况下,只有服务定位器、工厂模式或类似模式才有意义。

在这种情况下,工厂模式或类似模式是正确的解决方案,IMHO。只需实现一个factory/registry/locator对象,并使用Spring注入该对象。其余的和往常一样。
注入发生在对象创建时,但在运行时需要不同的服务实现。在这种情况下,只有服务定位器、工厂或类似模式才有意义。

在这种情况下,可以使用映射属性注入:

**private Map<TransactionServiceMap>  transactionServiceMap;**


<!-- results in a transactionServiceMap(java.util.Map) call -->
**<property name="transactionServiceMap">
    <map>
        <entry key="TRANSACTION_TYPE_1" value-ref="transactionService1"/>
        <entry key ="TRANSACTION_TYPE_2" value-ref="transactionService2"/>
    </map>
</property>**

在这种情况下,可以使用贴图属性注入:

**private Map<TransactionServiceMap>  transactionServiceMap;**


<!-- results in a transactionServiceMap(java.util.Map) call -->
**<property name="transactionServiceMap">
    <map>
        <entry key="TRANSACTION_TYPE_1" value-ref="transactionService1"/>
        <entry key ="TRANSACTION_TYPE_2" value-ref="transactionService2"/>
    </map>
</property>**

在这种情况下,可以使用贴图属性注入:

**private Map<TransactionServiceMap>  transactionServiceMap;**


<!-- results in a transactionServiceMap(java.util.Map) call -->
**<property name="transactionServiceMap">
    <map>
        <entry key="TRANSACTION_TYPE_1" value-ref="transactionService1"/>
        <entry key ="TRANSACTION_TYPE_2" value-ref="transactionService2"/>
    </map>
</property>**

在这种情况下,可以使用贴图属性注入:

**private Map<TransactionServiceMap>  transactionServiceMap;**


<!-- results in a transactionServiceMap(java.util.Map) call -->
**<property name="transactionServiceMap">
    <map>
        <entry key="TRANSACTION_TYPE_1" value-ref="transactionService1"/>
        <entry key ="TRANSACTION_TYPE_2" value-ref="transactionService2"/>
    </map>
</property>**

但是注入框架如何在DOSUTS方法中间切换实现呢?即使是最黑暗的AOP魔术,你也不能在中间的中间交换物体。即使你可以,这也是一个远离的解决方案。对。。。如果Spring有某种抽象工厂,在使用未实例化服务时会调用它,那么它会检查参数元属性并在应用程序配置中使用它呢?还是我完全疯了?我想我需要休息一下…嗯。。。据我所知,没有OOB这样的东西,对于一般的解决方案来说,它听起来过于情景化。当然,您可以围绕TransactionService创建自己的包装器,它可以做任何事情,但这样您就可以有效地实现我最初响应中的一种模式。哎呀,你甚至可以让它有点泛泛,比如用名字命名的bean来填充bean。YEP,我会让PoC注入工厂,在工厂类中注入每一个要返回的服务…但是注入框架如何在doStand方法中间切换实现呢?即使是最黑暗的AOP魔术,你也不能在中间的中间交换物体。即使你可以,这也是一个远离的解决方案。对。。。如果Spring有某种抽象工厂,在使用未实例化服务时会调用它,那么它会检查参数元属性并在应用程序配置中使用它呢?还是我完全疯了?我想我需要休息一下…嗯。。。据我所知,没有OOB这样的东西,对于一般的解决方案来说,它听起来过于情景化。当然,您可以围绕TransactionService创建自己的包装器,它可以做任何事情,但这样您就可以有效地实现我最初响应中的一种模式。哎呀,你甚至可以让它有点泛泛,比如用名字命名的bean来填充bean。YEP,我会让PoC注入工厂,在工厂类中注入每一个要返回的服务…但是注入框架如何在doStand方法中间切换实现呢?即使是最黑暗的AOP魔术,你也不能在中间的中间交换物体。即使你可以,这也是一个远离的解决方案。对。。。如果Spring有某种抽象工厂,在使用未实例化服务时会调用它,那么它会检查参数元属性并在应用程序配置中使用它呢?还是我完全疯了?我想我需要休息一下…嗯。。。据我所知,没有OOB这样的东西,对于一般的解决方案来说,它听起来过于情景化。当然,您可以围绕TransactionService创建自己的包装器,它可以做任何事情,但这样您就可以有效地实现我最初响应中的一种模式。哎呀,你甚至可以让它有点泛泛,比如用名字命名的bean来填充bean。YEP,我会让PoC注入工厂,在工厂类中注入每一个要返回的服务…但是注入框架如何在doStand方法中间切换实现呢?即使使用最黑暗的AoP魔法,你也无法交换我想要的对象