2016-03-23 11 views
7

私は定義された同じクラスのいくつかの豆いる:私は彼らにSpringでアノテーションを使って名前でオートワイヤリングする方法は?

@Autowired 
    public FieldDescriptor fullSpotField; 

    @Autowired 
    public FieldDescriptor annotationIdField; 

をautowireするとき、その結果、私は例外ことが可能と名前でautowireする方法

NoUniqueBeanDefinitionException: No qualifying bean of type [...FieldDescriptor] is defined: expected single matching bean but found ... 

@Bean 
    public FieldDescriptor fullSpotField() { 
    FieldDescriptor ans = new FieldDescriptor("full_spot", String.class); 
    return ans; 
    } 

    @Bean 
    public FieldDescriptor annotationIdField() { 
    FieldDescriptor ans = new FieldDescriptor("annotationID", Integer.class); 
    return ans; 
    } 

を取得XML設定で?

答えて

19

@Qualiferを使用して解決できます。

あなたが作ることができますあなたの場合は

@Bean 
@Qualifier("fullSpot") // Not mandatory. If not specified, it takes the method name i.e., "fullSpotField" as qualifier name. 
    public FieldDescriptor fullSpotField() { 
    FieldDescriptor ans = new FieldDescriptor("full_spot", String.class); 
    return ans; 
    } 

    @Bean 
    @Qualifier("annotationIdSpot") // Same as above comment. 
    public FieldDescriptor annotationIdField() { 
    FieldDescriptor ans = new FieldDescriptor("annotationID", Integer.class); 
    return ans; 
    } 

をし、その後、使用して注入することができます

@Autowired 
    @Qualifier("fullSpot") 
    public FieldDescriptor fullSpotField; 

    @Autowired 
    @Qualifier("annotationIdSpot") 
    public FieldDescriptor annotationIdField; 
+2

私はQualifier'は豆の作成方法の近くに必要とされていない@ '、それはするのに十分であることがわかりましたこの注釈を '@ Autowired'とともに追加してください。 – Dims

+0

@Dimsあなたは正しいです。 Bean作成メソッドで 'Qualifier 'が指定されていない場合は、最初のBeanの修飾子名としてメソッド名ex、" fullSpotField "が使用されます。 –