2012-01-14 11 views
0

単純な例を使用して、参照メソッド注入を実現しようとしています。しかし、メソッドを介して注入されたBeanの取得に失敗するようです。Spring Lookupメソッドの注入が機能しない

私は単純な豆を持っています。私はつまり、別のBeanにDemoBeanを注入しようとしています

public class DemoBean { 

    private String message; 

    public DemoBean() { 

    } 

    public DemoBean(String message) { 
     this.message = message; 
    } 

    // Getter and Setter methods 

    @Override 
    public String toString() { 
     return "DemoBean{" + 
       "message='" + message + '\'' + 
       '}'; 
    } 
} 

;:以下のようにDemoBean PropertyBean:

public abstract class PropertyBean { 

    private DemoBean bean; 
    private String message; 
    // other members... 

    public PropertyBean(String message) { 
     this.message = message; 
    } 

    // Getter and Setter methods... 

    // Method for lookup injection 
    protected abstract DemoBean createBean(); 

    @Override 
    public String toString() { 
     return "PropertyBean{" + 
       "bean=" + bean.toString() + 
       ", message='" + message + '\'' + 
       ", number=" + number + 
       '}'; 
    } 
} 

ノエ、私の豆の設定があります:

<bean id="demobean" class="aro.discoverspring.beans.DemoBean" scope="prototype"> 
<property name="message" value="The Default Message!!!" /> 
</bean> 

<bean id="propertybean" class="aro.discoverspring.beans.PropertyBean"> 
<constructor-arg name="message" value="A message in PropertyBean"/> 
<lookup-method name="createBean" bean="demobean" /> 
</bean> 

PropertyBeanのインスタンスを作成しようとします。私はそうすることができる。私は次の操作を行うとき(豆が注入取得されていないので!)しかし..私はDemoBeanプロパティにnullポインタ例外を取得

PropertyBean pb = (PropertyBean) ctx.getBean("propertybean");  
System.out.println(pb.toString()); 

私が間違って何をしているのですか?私は何かを見逃しましたか、そこに何か愚かなものを見落としていますか? Spring 3.0 reference (section 3.4.6.1)は同じことをしているようです。

+0

Spingリンクの違いは、 'scopebean =' prototype''を 'propertybean'に入れた点です。それを削除してみてください – Cratylus

+0

申し訳ありません!私の間違い。コードを修正しました –

答えて

1

beanプロパティを挿入しないでください。私は春がcreateBeanメソッドを実装していることを理解しているので、pb.createBean()を呼び出すと、DemoBeanのインスタンスが返されます。しかし、ProperyBeanにはbeanのプロパティに何も割り当てないので、nullでない方法はありません。

+0

春のリファレンス(3.4.6項)を見て、3.4.6.1項を指定してください。同様の例も参考になります。しかし、私は 'creatBean()'の概念を見ません。 ..あなたは私に何か参照を提供できますか? –

+0

注釈なしではどうすればよいですか? –

+0

@AbdelOlakara実際には 'createCommand'メソッドを使用するため、少し違う例です。 'bean'プロパティでクラスを汚染したくないときは、lookup-methodのアプローチを使いたいかもしれません。あなたのクラスで 'DemoBean'が必要なときは' createBean'を呼び出します。また、この場合、 'bean'は直列化されません。 –

関連する問題