public class Car {
@Qualifier("e2")
@Autowired
private Engine engine;
public void printData() {
System.out.println("Engine object ref "+engine.getModelOfYear());
}
}
public class Engine {
private String modelOfYear;
public String getModelOfYear() {
return modelOfYear;
}
public void setModelOfYear(String modelOfYear) {
this.modelOfYear = modelOfYear;
}
}
Spring.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="e1" class="beans.Engine">
<property name="modelOfYear" value="2013"/>
</bean>
<bean id="e2" class="beans.Engine">
<property name="modelOfYear" value="2011"/>
</bean>
<bean id="c1" class="beans.Car"/>
</beans>
测试类
public class Test {
public static void main(String[] args) {
ApplicationContext ap=new ClassPathXmlApplicationContext("resources/Spring.xml");
Car c=(Car)ap.getBean("c1");
c.printData();
}
}
我总是遇到异常
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'beans.Engine' available: expected single matching bean but found 2: e1,e2 at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:215) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584) ... 15 more
最佳答案
您将注释与 xml 配置混合在一起。
您在 XML 中声明了您的 bean Car
,但通过注释声明了 @Qualifier
,因此它不起作用。
替换
<bean id="c1" class="beans.Car"/>
与:
<bean id="c1" class="beans.Car">
<property name="engine" ref="e2"/>
</bean>
或者完全删除 xml 配置并使用完全注释(现在是首选和推荐)
关于java - 使用 @Qualifier 仍然出现 UnsatisfiedDependency 异常,任何人都可以帮助我解决这个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50498144/