gpt4 book ai didi

java - 具有多个接口(interface)实现的 Spring Autowire 注解

转载 作者:IT老高 更新时间:2023-10-28 13:45:59 27 4
gpt4 key购买 nike

假设你有一个接口(interface)

public interface A {
public void doSomething();
}

还有两个实现类

@Component(value="aImpl1")
public class AImpl1 implements A {

}

@Component(value="aImpl2")
public class AImpl2 implements A{

}

最后是一个将使用“A”实现的类:

@Component
public class MyClass {
@Autowire
A a;
}

现在如果我想注入(inject) AImpl1 我添加 @Qualifier("aImpl1") 而如果我想注入(inject) AImpl2 我添加@Qualifier("aImpl2")

问题是:在这种情况下 AImpl1AImpl2 是否可以指示 spring 以某种方式查找“A”的所有实现并使用一些特定于应用程序的约定来选择最合适的实现?例如,在这种情况下,我的约定可以使用具有最大后缀(即 AImpl2)的实现?

编辑:类 MyClass 根本不应该知道实现查找逻辑,它应该只找到它的属性“a”设置为 AImpl2 的对象。

最佳答案

您可以将所有实现注入(inject)为 List:

@Autowired
List<A> as;

或作为 Map 以 bean 名称作为键:

@Autowired
Map<String, A> as;

然后手动选择合适的实现(也许,在setter方法中):

@Autowired
public void setAs(Map<String, A> as) {
this.a = ...;
}

关于java - 具有多个接口(interface)实现的 Spring Autowire 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581882/

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