質問

簡単な例を使用して、ルックアップメソッドインジェクションを達成しようとしています。しかし、メソッドを介して豆を注入することに失敗しているようです。

つまり、シンプルな豆があります。以下のデモブアン:

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 Pointer例外を取得します(豆が注入されていないため!!)

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

私は何が間違っているのですか?私は何かを逃しましたか、それとも私はそこで愚かな何かを見落としていますか!?スプリング3.0リファレンス(セクション3.4.6.1) 同じことをしているようです。

役に立ちましたか?

解決

bean プロパティを注入すべきではありません。私が理解しているように、春の実装 createBean あなたのための方法、だからあなたが電話するとき pb.createBean() のインスタンスを返す必要があります DemoBean. 。しかし、あなたは何も割り当てません bean プロパティ ProperyBean したがって、それがヌルではない方法はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top