2010-11-17 14 views
20

My bahar fasulye kullanarak fasulye yapıcı bir değer enjekte ve ben xml yapılandırma ile başlatmak için yönetilen:nasıl Ek açıklamalar, eşsiz zorunlu bağımsız değişkenle bir kurucuya sahip

<bean name="interfaceParameters#ota" class="com.company.core.DefaultInterfaceParameters"> 
    <constructor-arg> 
    <value>OTA</value> 
    </constructor-arg> 
</bean> 

Sonra böyle bu fasulye kullanmak ve iyi çalışıyor.

@Resource(name = "interfaceParameters#ota") 
private InterfaceParameters interfaceParameters; 

Ama

@Resource(name = "interfaceParameters#ota") 
@contructorArg("ota") // I know it doesn't exists! 
private InterfaceParameters interfaceParameters; 

bu mümkün mü böyle bir şey annocations ile contructor arg değeri belirtmek istersiniz?

+0

Belki de cevap [burada] verilmiştir (http://stackoverflow.com/a/2306468/267197). –

cevap

45

İlk peşin

sayesinde, değil enjeksiyon noktalarında Fasulye tanımında yapıcı arg belirtmek zorunda ve. Ardından, kullanabileceği bahar en @Value açıklama (ilkbahar 3.0) Sorunu gördüğünüz gibi aynı sınıfın birden fasulye tanımlamak için görünür beri

@Component 
public class DefaultInterfaceParameters { 

    @Inject 
    public DefaultInterfaceParameters(@Value("${some.property}") String value) { 
     // assign to a field. 
    } 
} 

This is also encouraged as Spring advises constructor injection over field injection.

Bildiğim kadarıyla, bu, size uygun olmayabilir, farklı adlandırılmış. Bunun için ek açıklama kullanamazsınız, bunları XML'de tanımlamanız gerekir. Bununla birlikte, bu farklı fasülye sahip olmak iyi bir fikir olduğunu düşünmüyorum. Sadece dize değerlerini kullanmalısın. Ama daha fazla bilgi veremem çünkü tam sınıflarını bilmiyorum. Eğer ... bu yüzden, hala kullanılabilir durumda dize olacak ... özellik ... tüm özellikler ayarlanır sonra PostConstruct sadece denilen alacak @ ayarlayabilirsiniz arg

+0

Cevabınız için teşekkürler, "sadece dize değerleri kullanın" dan ne demek istiyorsunuz? – tbruyelle

+0

iyi, "OTA" dizesine ihtiyacınız var. Bunun için bir nesneye ihtiyacınız yok. – Bozho

+0

Gördüğünüz gibi, "OTA" dizesi, fasulyemin @postConstruct yönteminde kullanılır ve bu fasulye oluşturmak için zorunlu bir bilgidir. Dize veritabanından veri almak için kullanılır. Bu tipteki her fasülye, her dize değeri için farklı veriler döndürecektir. BTW, xml kullanımı hakkında haklısınız, aynı sınıf için birden fazla fasulye tanımladığımdan, ek açıklamaları kullanamıyorum. – tbruyelle

1

Bozho yerine yapıcı, söylediği gibi

İlgili konular