Java 具有多个接口实现的Spring Autowire Bean,在方法中定义实现
我不熟悉spring和spring boot,所以希望这不是一个愚蠢的问题 我有一个带有多个实现的接口。实现使用Java 具有多个接口实现的Spring Autowire Bean,在方法中定义实现,java,spring,spring-mvc,spring-boot,autowired,Java,Spring,Spring Mvc,Spring Boot,Autowired,我不熟悉spring和spring boot,所以希望这不是一个愚蠢的问题 我有一个带有多个实现的接口。实现使用@组件(“nameofinpl”)进行注释 我的目标是用选定的实现自动连接bean。在正常情况下,我可以使用@Autowired@Qualifier(“NameOfImpl”)来实现,但我的问题是我想在如下方法中选择一个实现: public void doSomethingMethod(){ for(String line: configFile){
@组件(“nameofinpl”)
进行注释
我的目标是用选定的实现自动连接bean。在正常情况下,我可以使用@Autowired@Qualifier(“NameOfImpl”)
来实现,但我的问题是我想在如下方法中选择一个实现:
public void doSomethingMethod(){
for(String line: configFile){
String[] values = line.split(";");
if (values[0].equals("A")) {
//here I want to select an bean implementation
}
else if (values[0].equals("B")) {
//here I want to select another bean implementation
}
}
bean.doSomething();
}
我怎样才能做到这一点?你有什么建议?
谢谢大家! 您可以要求Spring注入bean的
映射。地图中的键将是bean的名称
如果您有一个名为示例的接口
public interface Example {
}
和两个实现:
@Component("foo")
public class FooExample implements Example {
}
@Component("bar")
public class BarExample implements Example {
}
您可以插入示例bean的映射:
@Component
public class ExampleConsumer {
private final Map<String, Example> examples;
@Autowired
public ExampleConsumer(Map<String, Example> examples) {
this.examples = examples;
}
}
@组件
公共类示例消费者{
私人最终地图示例;
@自动连线
公共示例消费者(地图示例){
这个例子=例子;
}
}
在这种情况下,地图将包含两个条目:
“foo”
->FooExample
实例
“bar”
->BarExample
实例
这也在起作用
public interface Example {
}
@Component("foo")
public class FooExample implements Example {
}
@Component("bar")
public class BarExample implements Example {
}
您可以简单地自动连接它们
@Component
public class ExampleConsumer {
@Autowired
private final Map<String, Example> examples;
}
@组件
公共类示例消费者{
@自动连线
私人最终地图示例;
}
“foo”->foo示例实例
“bar”->BarExample instance您可以删除自动连接,因为您正在手动实例化实现。我的目标不是手动实例化它们。使用new
意味着实例化..是的,我知道,我需要一些东西,而不是使用new Impl();我编辑了帖子,看看这个方法