创建 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
我在 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