Jestem nowy na wiosnę i chciałem zapytać, czy możliwe jest przekazanie paramów do metod inicjowania i niszczenia fasoli.Parametry metody inicjacji wiosennej
Dzięki.
Jestem nowy na wiosnę i chciałem zapytać, czy możliwe jest przekazanie paramów do metod inicjowania i niszczenia fasoli.Parametry metody inicjacji wiosennej
Dzięki.
Nie, nie możesz. Jeśli potrzebujesz parametrów, będziesz musiał wcześniej wprowadzić je jako pola.
Bean Próbka
public class Foo{
@Autowired
private Bar bar;
public void init(){
bar.doSomething();
}
}
Sample XML:
<bean class="Foo" init-method="init" />
Metoda ta jest szczególnie przydatna, gdy nie można zmienić klasę próbujesz stworzyć jak w poprzedniej odpowiedzi, ale są dość pracy z API i musi korzystać z dostarczonego komponentu bean, jaki jest.
zawsze może utworzyć klasy (MyObjectFactory), który implementuje FactoryBean i wewnątrz metody GetObject() należy wpisać:
@Autowired
private MyReferenceObject myRef;
public Object getObject()
{
MyObject myObj = new MyObject();
myObj.init(myRef);
return myObj;
}
A w context.xml wiosny byś mieć prosty:
<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();
}
}
patrz kod wiosna soruce w Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null);
metoda init jest znalezienie i param jest null
OK, dzięki za informacje – Radu