2011-09-13 13 views

Odpowiedz

10

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" /> 
+0

OK, dzięki za informacje – Radu

2

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"/> 
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(); 
    } 
} 

patrz kod wiosna soruce w Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null); metoda init jest znalezienie i param jest null

Powiązane problemy