gpt4 book ai didi

spring - Autowiring 问题和没有唯一的 bean

转载 作者:IT老高 更新时间:2023-10-28 13:52:47 25 4
gpt4 key购买 nike

我有 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);
}

但我有这个消息:

No unique bean of type [A] ] is defined: expected single matching bean but found 2: [A, B, moveModeleMarshaller]

我真的不明白为什么我有这个消息以及即使在阅读了 Spring 文档之后如何解决。

提前致谢。

最佳答案

您应该使用 @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);
}

您还必须在将 Spring bean Autowiring 到的类型 A 的实例上使用 @Qualifier 注释。

类似这样的:

public class Demo {

@Autowired
@Qualifier("a")
private A a;

@Autowired
@Qualifier("b")
private A a2;

public void demo(..) {..}
}

如果您不喜欢在生产代码中使用此 Spring 配置,则必须改为使用 XML 或 Java 配置编写依赖注入(inject)逻辑。

您还可以在扩展类型 A 的服务类之一上方使用 @Primary 注释指定类型 A 的默认 bean。然后 Spring 可以 Autowiring 而无需指定 @Qualifier注释。

由于 Spring 永远不会尝试猜测要注入(inject)哪个 bean,因此您必须指定哪个或用 @Primary 标记其中一个,只要它的类型不止一个 b​​ean。

关于spring - Autowiring 问题和没有唯一的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699608/

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