【问题标题】:Spring Lookup method injection not workingSpring Lookup 方法注入不起作用
【发布时间】:2012-01-14 10:25:04
【问题描述】:

我正在尝试使用一个简单的示例来实现查找方法注入。但是,似乎无法通过该方法注入 bean。

我有一个简单的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,即;属性豆:

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 配置:

<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) 似乎也在做同样的事情。

【问题讨论】:

  • 在 Sping 链接中,不同之处在于您将 scope="prototype" 放入您的 propertybean。尝试删除它
  • 哎呀..对不起!我的错。我已经更正了代码

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


【解决方案1】:

bean 属性不应该被注入。据我了解,spring 为您实现了createBean 方法,因此当您调用pb.createBean() 时,它应该返回DemoBean 的实例。但是你没有为ProperyBean 中的bean 属性分配任何东西,所以它不可能不为空。

【讨论】:

  • 看看 spring 参考(第 3.4.6 节)并指定第 3.4.6.1 节.. 参考中也显示了类似的示例.. 但我没有看到任何 creatBean() 的概念..你能给我任何参考吗?
  • 没有注释怎么办?
  • @AbdelOlakara 这个例子有点不同,因为他们实际上使用了createCommand 方法。当您不想用bean 属性污染您的班级时,您可能需要使用查找方法。当您在课堂上需要DemoBean 时,只需致电createBean。在这种情况下,bean 也不会被序列化。
  • 啊啊!!现在我明白了。。谢谢!!您能否删除答案中的代码。它可能会误导其他人。
猜你喜欢
  • 2011-04-22
  • 2018-07-11
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
相关资源
最近更新 更多