gpt4 book ai didi

java - Spring Autowire Bean具有多个接口(interface)实现,在方法中定义实现

转载 作者:行者123 更新时间:2023-12-02 13:15:38 26 4
gpt4 key购买 nike

我是 Spring 和 Spring Boot 的新手,所以希望这不是一个愚蠢的问题。

我有一个带有多个实现的接口(interface)。实现注释为 @Component("NameOfImpl") .

我的目标是使用选定的实现 Autowiring 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 注入(inject) bean 的Map。映射中的键将是 bean 的名称。

如果您有一个名为Example的接口(interface)

public interface Example {

}

还有两个实现:

@Component("foo")
public class FooExample implements Example {

}

@Component("bar")
public class BarExample implements Example {

}

您可以注入(inject)示例 bean 的映射:

@Component
public class ExampleConsumer {

private final Map<String, Example> examples;

@Autowired
public ExampleConsumer(Map<String, Example> examples) {
this.examples = examples;
}
}

在这种情况下, map 将包含两个条目:

  • "foo" -> FooExample 实例
  • "bar" -> BarExample 实例

关于java - Spring Autowire Bean具有多个接口(interface)实现,在方法中定义实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33996326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com