我有2个类(B,C)扩展了A类.
@Service
public class A extends AbstratClass<Modele>{
@Autowired
A(MyClass br) {
super(br);
}
@Service
public class B extends A{
@Autowired
B (MyClass br) {
super(br);
}
@Service
public class C extends A{
@Autowired
C (MyClass br) {
super(br);
}
Run Code Online (Sandbox Code Playgroud)
但我有这样的信息:
没有定义类型为[A]的唯一bean:期望的单个匹配bean但找到2:[A,B,moveModeleMarshaller]
我真的不知道为什么我有这个消息以及如何在阅读Spring文档后解决.
提前致谢.
Esp*_*pen 15
您应该使用@Qualifier注释将类重写为类似的内容.
@Service
@Qualifier("a")
public class A extends AbstratClass<Modele>{
@Autowired
A(MyClass br) {
super(br);
}
@Service
@Qualifier("b")
public class B extends A{
@Autowired
B (MyClass br) {
super(br);
}
@Service
@Qualifier("c")
public class C extends A{
@Autowired
C (MyClass br) {
super(br);
}
Run Code Online (Sandbox Code Playgroud)
您还必须在类型A的实例上使用@Qualifier注释,并将Spring bean自动装入.
像这样的东西:
public class Demo {
@Autowired
@Qualifier("a")
private A a;
@Autowired
@Qualifier("b")
private A a2;
public void demo(..) {..}
}
Run Code Online (Sandbox Code Playgroud)
如果您不希望在生产代码中使用此Spring配置,则必须使用XML或Java配置编写依赖注入逻辑.
您还可以指定类型A的默认bean,其@Primary注释位于一个扩展类型A的服务类之上.然后,Spring可以自动装配而不指定@Qualifier注释.
由于Spring永远不会尝试猜测要注入哪个bean,因此只要有@Primary多个bean类型,就必须指定哪个bean或者标记其中一个bean.
您正在尝试(在其他地方)自动装配类型为 的 bean A。就像是:
@Autowired
private A beanA;
Run Code Online (Sandbox Code Playgroud)
但你有 2 个符合这个条件的 Bean。
您可以通过使用@Resource并指定确切的 bean 来解决此问题:
@Resource("b")
private A beanA;
Run Code Online (Sandbox Code Playgroud)
(其中“b”是注入的 bean 的名称)或使用注释@Qualifier。