2011-09-13 21 views
6

İlkbaharda yeniim ve paramları init'e iletmenin mümkün olup olmadığını ve fasulye yöntemlerini yok etmenin mümkün olup olmadığını sormak istedim.Spring init-method param

Teşekkürler.

cevap

10

Hayır, yapamazsınız. Parametrelere ihtiyacınız varsa, bunları önceden alan olarak enjekte etmeniz gerekir.

Numune Fasulyesi

public class Foo{ 

    @Autowired 
    private Bar bar; 

    public void init(){ 
     bar.doSomething(); 
    } 

} 

Örnek XML:

<bean class="Foo" init-method="init" /> 
+0

Tamam, bilgi için teşekkürler – Radu

2

Eğer önceki yanıtta gibi yaratmaya çalıştığımız sınıfı değiştiremezsiniz ama doğrusu ile çalışırken bu yöntem özellikle yararlıdır bir API ve verilen fasulye olduğu gibi kullanmalıdır.

@Autowired 
private MyReferenceObject myRef; 
public Object getObject() 
{ 
    MyObject myObj = new MyObject(); 
    myObj.init(myRef); 
    return myObj; 
} 

Ve bahar context.xml içinde basit olurdu: FactoryBean ve getObject() yöntemi içinde uygular

Her zaman bir sınıf (MyObjectFactory) yaratabilir yazman gereken

<bean id="myObject" class="MyObjectFactory"/> 
0
protected void invokeCustomInitMethod(String beanName, Object bean, String initMethodName) 
     throws Throwable { 

    if (logger.isDebugEnabled()) { 
     logger.debug("Invoking custom init method '" + initMethodName + 
       "' on bean with beanName '" + beanName + "'"); 
    } 
    try { 
     Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null); 
     if (initMethod == null) { 
      throw new NoSuchMethodException("Couldn't find an init method named '" + initMethodName + 
        "' on bean with name '" + beanName + "'"); 
     } 
     if (!Modifier.isPublic(initMethod.getModifiers())) { 
      initMethod.setAccessible(true); 
     } 
     initMethod.invoke(bean, (Object[]) null); 
    } 
    catch (InvocationTargetException ex) { 
     throw ex.getTargetException(); 
    } 
} 

bakınız yay soruce kodu Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null); init yöntem bulmak ve param boş