Java 如何使用Spring进行参数化依赖项注入?
我想知道如何使用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>
事务列表
,我需要根据它们的事务类型
来处理它们。因此,我需要一个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魔法,你也无法交换我想要的对象