2016-03-23 18 views
7

Ben tanımlanan aynı sınıfın çeşitli fasulye: Onlaraİlkbaharda ek açıklamalarla nasıl adlanır?

@Autowired 
    public FieldDescriptor fullSpotField; 

    @Autowired 
    public FieldDescriptor annotationIdField; 

autowire zaman dolayısıyla

@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; 
    } 

Ben

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

nasıl mümkün olduğu adıyla autowire bir istisna olsun XML yapılandırmasında?

cevap

19

Çözmek için @Qualifer kullanabilirsiniz.

@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; 
    } 

ve sonradan kullandığınız enjekte edebilir: Senin durumunda

yapabilirsiniz ben Qualifier` fasulye oluşturma yöntemlerine yakın gerekli değildir @, bu yeterlidir `bulundu

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

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

Bu açıklamayı '@ Autowired' ile birlikte ekleyin – Dims

+0

@Dims Siz haklısınız. Fasulye oluşturma yönteminde "niteleyici" belirtilmemişse, ilk bean için niteleyici adı olarak "fullSpotField" yöntem adını alır. –

İlgili konular