NoUniqueBeanDefinitionException:没有'beans.Engin'类型的限定bean可用:期望的单个匹配bean但找到2

时间:2018-04-24 19:14:18

标签: spring

我创建了具有使用@Autowired注释的Engine类类型字段的Car类。当我使用@Qualifer时出现以下错误:

org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有'beans.Engine'类型的限定bean可用:期望的单个匹配bean但找到2:def,abc

我在spring.xml中使用DTD而不是上下文模式。下面是xml文件:

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN""http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean id="def" class="beans.Engine">
    <property name="modelYear" value="2015"/>
</bean>

<bean id="abc" class="beans.Engine">
    <property name="modelYear" value="2015"/>
</bean>
<bean id="c" class="beans.Car"/>    
</beans>

Car.java

公共类汽车{

@Autowired
@Qualifier(value="def")
private Engine engine;

public void printCarData(){
        System.out.println("Engine Model Year  :  "+engine.getModelYear());

}

}

Engine.java

公共类引擎{

private String modelYear;

public void setModelYear(String modelYear) {
    this.modelYear=modelYear;
}

public String getModelYear() {
    return modelYear;
}

}

Client.java

public class Client {

public static void main(String [] a){       

    ApplicationContext ap = new ClassPathXmlApplicationContext("resources/spring.xml");

    Car c = (Car)ap.getBean("c");
    c.printCarData();
}

}

1 个答案:

答案 0 :(得分:0)

原因是您有两个类型为beans.Engine的bean。

NoUniqueBeanDefinitionException 的doc api网站中,我们可以看到:

  

当向BeanFactory请求bean实例时抛出异常   当只有一个时,找到了多个匹配的候选者   期待匹配的豆。

你有两个相同类型的bean,当你的项目初始化时,它不知道选择哪一个,因此会发生这种异常。

<bean id="def" class="beans.Engine">
    <property name="modelYear" value="2015"/>
</bean>

<bean id="abc" class="beans.Engine">
    <property name="modelYear" value="2015"/>
</bean>

为了解决这个问题,只需删除其中一个。