2013-11-09 8 views
15

@Autowired byコンストラクタは、型によってBeanを探します。 autowiredアノテーションを使用してコンストラクタに名前でBeanを挿入する方法 同じタイプの2つのBeanがありますが、Bean名に基づいて別の同じクラスのコンストラクタに注入する必要があります。どうすればいいのですか?@Autowiredはコンストラクタによって、型別に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があることが必要であることを私に言って例外を取得そのタイプの。どのようにしてid="B"のbeanをコンストラクタインジェクションを通してこのクラスCに注入できますか?

私のapplicationContext.xmlで私はautowire="byType"を挙げました。私はこの特定のクラスでのみbyNameをautowireする必要があります。残りはすべてautowiredする必要があります。タイプのみ

答えて

18

コンストラクタパラメータのターゲットBean IDで@Qualifierアノテーションを使用する必要があります。

<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 
    } 
} 
+0

まだ動作していません。 I)は、EMが(entityManagerFactory.createEntityManagerを= { \t \t \t \t @Autowired \t公共CheckDAO(@Qualifier( "のEntityManager")のEntityManagerFactoryのEntityManagerFactory)を用います。 \t \t} この例外が発生しました。 org.springframework.beans.factory.BeanCreationException:名前 'checkDAO'を持つBeanの作成中にエラーが発生しました:永続性依存関係の注入が失敗しました。ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです:タイプ[javax.persistence.EntityManagerFactory]の適格なBeanが定義されていません:予想される単一のBeanですが見つかりました2 – user2972319

+0

残念です – user2972319

関連する問題