gpt4 book ai didi

spring - Autowiring 分层 bean

转载 作者:行者123 更新时间:2023-12-02 04:33:20 27 4
gpt4 key购买 nike

这是我的场景。我有两个类(class) ClassAClassBB类继承A类
我在它们两个上使用@Component注释来使它们成为Spring bean。

@Component
public class ClassA{
// parent
}

@Component
public class ClassB extends ClassA{
// child
}

public class ClassC{

@Autowired
private ClassA classA;

public void doSomething(){

}
}

现在,每当我尝试在 ClassC 中使用 @autowired 注释来注入(inject) ClassA 时,如上所示,我都会收到以下异常。

No unique bean of type [ClassA] is defined: expected single matching bean but found 2: [classA, classB]

据我了解,当按类型 Autowiring 时,spring 会找到两个可分配给 ClassA 的 bean,因此它会抛出异常。

除了使用@Qualifier注释和按名称 Autowiring 之外,是否有一种简单的方法可以解决这个问题?

我能否指示 spring 不仅检查可按类型分配的 bean,还检查它是否是完全相同的类类型?

最佳答案

是的,使用 @Primary注释。

如果这是不可行的并且您不想使用@Qualifier,那么您将必须手动解决它。像这样的东西:

@Autowired
private List<ClassA> candidates;

private ClassA actual;

@PostConstruct
public void postConstruct() {
for (ClassA candidate : candidates) {
if (AopProxyUtils.ultimateTargetClass(candidate).equals(ClassA.class)) {
actual = candidate;
break;
}
}
org.springframework.util.Assert.notNull(actual , "No bean of exact type ClassA found.");
}

关于spring - Autowiring 分层 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058108/

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