スプリングルックアップメソッドインジェクションが機能していません
-
28-10-2019 - |
質問
簡単な例を使用して、ルックアップメソッドインジェクションを達成しようとしています。しかし、メソッドを介して豆を注入することに失敗しているようです。
つまり、シンプルな豆があります。以下のデモブアン:
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
したがって、それがヌルではない方法はありません。
所属していません StackOverflow