Java 创建bean时出错:没有符合条件的bean,需要单个匹配的bean,但找到3个

Java 创建bean时出错:没有符合条件的bean,需要单个匹配的bean,但找到3个,java,spring,spring-mvc,controller,autowired,Java,Spring,Spring Mvc,Controller,Autowired,我在SpringMVC中有一个查询 我有4个用于DB相关方法的DAO(数据访问对象)类 其中3个是儿童班,第4个是所有儿童班的家长。假设A,B,C,D是4个类,A是B,C,D的父类 所以我将所有这些注释为@Repository。现在在另一节课中,让我们假设E,我是自动布线B级: Class E { @Autowired B b; .. .. } 这个很好用。 现在在另一个F班,我在做: Class F { @Autowired A a; .. .. } 现在执行此命令会产生错误: 没有符

我在SpringMVC中有一个查询 我有4个用于DB相关方法的DAO(数据访问对象)类 其中3个是儿童班,第4个是所有儿童班的家长。假设A,B,C,D是4个类,A是B,C,D的父类 所以我将所有这些注释为@Repository。现在在另一节课中,让我们假设E,我是自动布线B级:

Class E {
@Autowired 
B b;
..
..
}
这个很好用。 现在在另一个F班,我在做:

Class F {
@Autowired 
A a;
..
..
}
现在执行此命令会产生错误:

没有符合条件的bean,应为单个匹配bean,但找到3个

现在我理解了这个问题,但仍然不太清楚我所缺少的是哪一个基本的spring概念。有人能详细解释一下吗。
我想我错过了班上的限定词。但是这个类不是一个接口。那么,如果我特别需要一个类的方法,而这个类在子类中不存在呢。那个么限定符在这里有什么帮助呢。

默认情况下,Spring使用bean的类型来查找自动连接的匹配项。如果在ApplicationContext中找到多个相同类型的bean,那么您将得到一个错误“预期单个匹配bean,但找到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

嘿,谢谢,我错过了您指出的内容。但是我想补充一点,当我们尝试自动连接父类而不是子类时,将抛出找到的这个多bean。我试过这个。如果我们自动连接子类,它不会抛出错误