java - 使用 @Qualifier 仍然出现 UnsatisfiedDependency 异常,任何人都可以帮助我解决这个问题

标签 java spring

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/

相关文章:

java - 是否可以将现有的 Java 项目转换为 Spring-Batch 作业

java - spring hibernate实现一对一关系

java - 如何向 querydsl 谓词添加比较器?

java - DTO、VO、POJO、JavaBean 之间的区别?

Java - 在这种情况下,委托(delegate)是一个好的解决方案吗?

java - 如何在日志文件中打印log.info消息

Java CompletableFuture,什么时候调用 completableFuture.handle ?

java - 让旋转程序重复?

java - 我应该在 Spring 5 项目中使用具有实体关系的 MongoDB 来实现端到端非阻塞吗?

java - Spring4 MVC Controller 可分页不起作用