İ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.
İ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.
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" />
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"/>
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ş
Tamam, bilgi için teşekkürler – Radu