Spring Lookup方法注入不起作用

时间:2012-01-14 10:25:05

标签: java spring inversion-of-control spring-3

我正在尝试使用一个简单的例子来实现查找方法注入。但是,似乎无法通过该方法注入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注入另一个bean中; 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 +
                '}';
    }
}

Noe,有我的bean配置:

<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属性上得到空指针异常(因为bean没有被注入!!)

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

我做错了什么?我错过了什么,或者我忽略了一些愚蠢的东西!? Spring 3.0 reference (section 3.4.6.1)似乎也在做同样的事情。

1 个答案:

答案 0 :(得分:1)

不应该注入

bean属性。据我所知,spring为您实现createBean方法,因此当您调用pb.createBean()时,它应该返回DemoBean的实例。但是你没有为bean中的ProperyBean属性分配任何内容,所以它没有办法让它不为空。