2011-09-13 15 views

答えて

10

いいえ、できません。パラメータが必要な場合は、事前にフィールドとして注入する必要があります。

サンプル・ビーン

public class Foo{ 

    @Autowired 
    private Bar bar; 

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

} 

サンプルXML:

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

ありがとう、情報ありがとうございます – Radu

2

あなたが前の回答のように作成しようとしているクラスを変更することはできませんが、あなたは、むしろで作業しているときに、この方法は特に便利ですAPIを提供し、提供されたBeanをそのまま使用する必要があります。

あなたはいつもFactoryBeanのを実装するクラス(MyObjectFactory)を作成し、あなたが書くべきのgetObject()メソッド内の可能性:

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

そして、あなたは簡単なを持っているでしょう春のcontext.xmlで:

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

参照ばねsoruceコード Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null);でinitメソッドを見つけるとparamがnullである

関連する問題