我是春季和春季靴子的新手,所以希望这不是一个愚蠢的问题。
我有几个实现的接口。实现使用@Component("NameOfImpl")
注释。
我的目标是使用选定的实现自动装配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();
}
我怎样才能实现这一目标?你有什么建议? 谢谢!
答案 0 :(得分:8)
您可以要求Spring注入Map
个bean。地图中的键将是bean的名称。
如果您有名为Example
的接口
public interface Example {
}
两个实现:
@Component("foo")
public class FooExample implements Example {
}
@Component("bar")
public class BarExample implements Example {
}
您可以拥有Example
注入的bean的地图:
@Component
public class ExampleConsumer {
private final Map<String, Example> examples;
@Autowired
public ExampleConsumer(Map<String, Example> examples) {
this.examples = examples;
}
}
在这种情况下,地图将包含两个条目:
"foo"
- &gt; FooExample
实例"bar"
- &gt; BarExample
实例答案 1 :(得分:0)
这也可以
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”-> FooExample实例 “ bar”-> BarExample实例