创建 bean 时出错:没有合格的 bean,需要单个匹配的 bean,但找到了 3 个

error creating bean: No qualifying bean, expected single matching bean but found 3

我在 Spring MVC 中有一个查询 我有 4 个 DAO(data access object) classes 用于 DB 相关方法 其中 3 个是 child classes,第 4 个是 parent。假设A,B,C,D是4个classes,A是B,C,D的parent 所以我将所有这些注释为 @Repository。现在在另一个 class 中假设 E ,我是 Autowiring B class as:

Class E {
@Autowired 
B b;
..
..
}

这很好用。 现在在另一个 class F 中,我正在做 :

Class F {
@Autowired 
A a;
..
..
}

现在执行此操作会出现错误:

No qualifying bean, expected single matching bean but found 3

现在我明白了这个问题,但仍然不太清楚我缺少的是哪个基本 spring 概念。谁能详细解释一下。 我想我在 A class 之上缺少 @Qualifier。但是这个 A class 不是接口。那么,如果我特别需要 child classes 中不存在的 A class 方法怎么办?那么限定词在这里有什么帮助。

Spring 默认情况下使用 bean 的类型来查找自动装配的匹配项。如果在 ApplicationContext 中找到多个相同类型的 bean,那么您将收到错误消息“expected single matching bean but found 3, A, B, C”。一种使用 @Qualifier 查找匹配项的方法,它通过名称查找 Bean。

@Component class A implements DAO {...}
@Component class B implements DAO {...}

class F {
@Autowired
@Qualifier('a') //lowercase "a" will be the default bean name for A
A a;

另一种选择是标记@Primary class A 然后bean A 将被自动装配,你可以省略@Qualifier