0

我正在乱搞并尝试一些示例弹簧代码。在这种情况下,我试图创建一个字符串并在另一个 bean 中使用它。另一个 bean 在一个类中设置字符串,然后当我调用该类时,希望它应该打印出消息。但是,我收到一条错误消息。请有人建议这里可能有什么问题吗?

public static void main(String[] args) {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("MyConfig.xml");

SetterMessage message = (SetterMessage) applicationContext.getBean("setStringFromBean");
System.out.println(message.getMessage()); 
}

public class SetterMessage {

    private String message = null;
    /**
     * Gets message.
     */
    public String getMessage() {
        return message;
    }

    /**
     * Sets message.
     */
    public void setMessage(String message) {
        this.message = message;
    }
}

<bean id="createString" class="java.lang.String">
<constructor-arg value="Hello from a bean"</constructor-arg>
</bean>

<bean id="setStringFromBean" class="SetterMessage">
    <property name="message" ref="createString" />
</bean>

错误是

2012 年 10 月 23 日晚上 8:36:58 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息:刷新 org.springframework.context.support.ClassPathXmlApplicationContext@4447393f:启动日期 [2012 年 10 月 23 日星期二 20:36:58 BST];上下文层次结构的根 2012 年 10 月 23 日 8:36:58 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO:从类路径资源 [MyConfig.xml] 加载 XML bean 定义 2012 年 10 月 23 日 8:36:58 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons INFO:在 org.springframework.beans.factory.support.DefaultListableBeanFactory@643ae941 中预实例化单例:定义 bean [defaultMessage,constructorBean,setterMessage];工厂层次结构的根线程“主”org.springframework 中的异常。

4

3 回答 3

1

您正在按名称查找 bean,但尚未设置其名称。

尝试:

<bean id="setStringFromBean" name="setStringFromBean" class="SetterMessage">
  <property name="message" ref="createString" />
</bean>
于 2012-10-23T19:51:46.430 回答
0

我在 xml 文件中有一个错误的注释标签,因此它没有被正确解析

于 2012-10-23T20:25:29.140 回答
-1

您需要创建一个构造函数来设置“消息”属性,因为您间接告诉容器在构造函数的帮助下设置“消息”属性。因此,如果不创建构造函数,则无法设置“消息”属性值。只需执行以下操作:

public SetterMessage(String message) {
    this.message = message;

}

于 2015-07-22T19:56:12.117 回答