2011-08-31 16 views
29

İlkbaharda mümkün olabilir, fasulyenin sınıfının kamu kurucusu yok, sadece özel mi? Fasulye oluşturulduğunda bu özel kurucu çağrılacak mı? Teşekkürler.Java Özel yapıcıya sahip Spring bean

+6

Bir deneme yapıp sonuçları yayınlamaya ne dersiniz? – dm3

+0

Zor - Tüm kaynağım yok. – user710818

cevap

52

Evet, Bahar özel kurucuları çalıştırabilir. Görünürden bağımsız olarak, doğru argümanlarla bir kurucu bulursa, yapıcının erişilebilir olmasını sağlamak için yansımayı kullanır.

+0

Lütfen bana dokümanlar için referans verebilir misiniz? Yapıcı parametreler ve bu argümanlara atanan değerlere xml dosyasında sahiptir. – user710818

+0

Yani bir fasulye özel fasulye gibi özel bir şey varsa() {...} bahar bunu çağırabilir? Bu nasıl mümkün, bu "özel" in tüm amacına meydan okuyor. –

+0

Maalesef, yalnızca argüman olmama konusunda hatalıyım. Sadece kendi projelerimde fark ettiğim şeylerle gidiyorum. Her yerde bahar belgelerinde gördüğümü söyleyemem. Fakat bu, sınıflandırmadan, sınıflandırmadan sorumlu olan javadoc.http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/BeanUtils.html#instantiateClass(java.lang.reflect.Constructor,%20java.lang.Object .. .) –

-2

Normalde bu tür çekirdeklerde statik bir fabrika yöntemine sahip olursunuz, bu yöntemin, o fasulyenin bir örneğini elde etmek için ilkbahar olarak belirtebilirsiniz. Bkz. 3.3.1.3 here. Görünürlük kısıtlamalarına karşı çıkmak yerine, Spring tarafından önerilen yol budur.

+0

garip, statik bir yöntem yok, kamu kurucusu yok ama hata ayıkladığım zaman - özel kurucu çağrıldı! sun.reflect.NativeConstructorAccessorImpl – user710818

+0

Özellikler/kod olmadan, daha fazla yorum yapmak mümkün olmayacaktır! –

+0

Sanırım yanılıyorsunuz. Belirli bir kod yok - hata ayıklayıcıda sadece standart güneş/yay yöntemlerini görüyorum. – user710818

3

Hep The IoC container: Instantiation using an instance factory method den ziyade bir varsayılan kurucu güvenmek yerine fasulye oluşturmak için bir fabrika yöntemi kullanabilirsiniz: Bu, fasulye için varsayılan olmayan kurucular kullanabilmesidir

<!-- the factory bean, which contains a method called createInstance() --> 
<bean id="serviceLocator" class="com.foo.DefaultServiceLocator"> 
    <!-- inject any dependencies required by this locator bean --> 
</bean> 

<!-- the bean to be created via the factory bean --> 
<bean id="exampleBean" 
     factory-bean="serviceLocator" 
     factory-method="createInstance"/> 

ve Fabrika metodu çekirdeği için bağımlılıklar da enjekte edilebilir.

+0

ilginç, ama ben fabrika bulamıyorum. Başka bir şekilde var olabilir mi? – user710818

+0

@Matthew: Bazı fugly üçüncü taraf kodları etrafında Spring uyarlama görünüyor. Bu sadece dağınık olmak için _bound_. –

+1

@Donal, hayır Yorumda ne dediğini anlamadım. –

2

Evet, Özel yapımcılar ilkbaharda çağrılır. kodumu düşünün :

Bean tanım dosyası:

<bean id="message" class="com.aa.testp.Message"> 
     <constructor-arg index="0" value="Hi Nice"/> 
    </bean> 

Bean sınıfı:

package com.aa.testp; 

public class Message { 

    private String message; 

    private Message(String msg) { 
     // You may add your log or print statements to check execution or invocation 
     message = msg; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public void display() { 
     System.out.println(" Hi " + message); 
    } 

} 

yukarıdaki kod çalışıyor. Bu nedenle, bahar özel kurucuyu çağırdı.

İlgili konular