【问题标题】:@Autowired by constructor looks for beans by type. How to inject a bean by name to a constructor using autowired annotation@Autowired by constructor 按类型查找 bean。如何使用自动装配注解按名称将 bean 注入构造函数
【发布时间】:2013-11-21 14:19:24
【问题描述】:

@Autowired 由构造函数按类型查找 bean。如何使用自动装配注解按名称将 bean 注入构造函数? 我有 2 个相同类型的 bean,但我需要根据 bean 名称将其注入到另一个相同类的构造函数中。我该怎么做?

XML:

 <bean id="A" class="com.Check"/>
 <bean id="B" class="com.Check"/>

Java:

Class C {

   private Check check;

   @Autowired
   public C(Check check){
       this.check = check
   }

  }

当我这样做时,我得到一个异常,告诉我我有 2 个相同类型的 bean 检查,但它要求只有一个该类型的 bean。如何通过构造函数注入将id="B"的bean注入到这个类C中?

在我的applicationContext.xml 中,我提到了autowire="byType"。我只需要在这个特定的类中自动装配byName,其余的只需要按类型自动装配

【问题讨论】:

    标签: spring-annotations spring-3


    【解决方案1】:

    您应该将@Qualifier 注解与您的目标 bean id 一起用于构造函数参数。

    <bean id="A" class="com.Check"/>
    <bean id="B" class="com.Check"/>
    
    Class C {
    
       private Check check;
    
       @Autowired
       public C(@Qualifier("A") Check check){ //<-- here you should provide your target bean id
          this.check = check
       }
    }
    

    【讨论】:

    • 还是不行。我使用了@Autowired public CheckDAO(@Qualifier("entityManager")EntityManagerFactory entityManagerFactory){ em = entityManagerFactory.createEntityManager();我得到这个例外。 org.springframework.beans.factory.BeanCreationException:创建名为“checkDAO”的bean时出错:注入持久性依赖项失败;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义 [javax.persistence.EntityManagerFactory] ​​类型的合格 bean:预期单个 bean 但找到 2
    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 2012-08-03
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多