我创建了具有使用@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();
}
}
答案 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>
为了解决这个问题,只需删除其中一个。