gpt4 book ai didi

java - 为什么我在 Spring 的 Autowiring 中没有得到 No unique bean of type

转载 作者:行者123 更新时间:2023-11-29 07:36:58 25 4
gpt4 key购买 nike

Person.java

@Controller
public class Person
{
@Autowired
private Ability ability;

public void printMessage(){

ability.printMessasge();
}

public void setOutputGenerator( Ability ability) {
this.ability = ability;
}
}

能力.java

@Controller
public class Ability
{
void printMessasge(){

System.out.println("I print message");
}

}

Spring .xml

<bean id="invisible" class="com.mkyong.common.Ability" >
</bean>

<context:component-scan base-package="com.mkyong" />

应用程序.java

public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring.xml");

Person person = (Person) context.getBean("person");
person.printMessage( );
}

在上面的例子中我定义了两个bean Ability第一类使用@Controller和一个 xml文件。根据Autowire按类型我应该得到

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: 
...
No unique bean of type [com.mkyong.common.Ability] is defined:

但我得到了正确的输出。为什么?

如果我创建一个由 Ability 类实现的接口(interface),那么我将得到 UnsatisfiedDependencyException 异常。像这样:

父类.java

public interface Parent{

public void printMessasge();

}

能力.java

@Controller
public class Ability implements Parent
{
void printMessasge(){

System.out.println("I print message");
}

Person.java

@Controller
public class Person
{
@Autowired
Parent parent;
public void printMessage(){
parent.printMessasge();
}

public void setOutputGenerator( Parent parent) {
this.parent= parent;
}
}

最佳答案

默认情况下 Spring 确实按类型匹配,但在有多个匹配 bean 的情况下,它会退回到按名称匹配。引用 ( 6.9.4 Fine-tuning annotation-based autowiring with qualifiers) 说:

For a fallback match, the bean name is considered a default qualifier value.

使用 @Qualifier注释使按类型 Autowiring 以及按名称进行的 Autowiring 更加明确。

关于java - 为什么我在 Spring 的 Autowiring 中没有得到 No unique bean of type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34508008/

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