为什么bean id需要在我的例子中使用相同的名称?以及为什么bean文件永远不会返回我的输出,因为我将它的值更改为bean配置文件?

时间:2014-10-18 08:03:25

标签: java spring spring-mvc output

我完全是Spring framework的初学者。我正在玩一个当时创建一个对象实例的例子。所以需要你的帮助!

看一下这个例子:

MainApp.java

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp{
    public static void main(String[] args){

        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        HelloWorld obj1=(HelloWorld) context.getBean("helloBd2");

        obj1.setMessage("fooo..");
        obj1.getMessage();

        HelloWorld obj2=(HelloWorld) context.getBean("helloBd2");
        obj2.getMessage();
    }
}

第一个问题: 为什么这里bean id需要同名?否则会出现以下错误..

    Oct 18, 2014 1:28:44 PM 
    org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh INFO: Refreshing 
    org.springframework.context.support.ClassPathXmlApplicationContext@1c12fb0: startup   
    date [Sat Oct 18 13:28:44 PDT 2014]; root of context hierarchy Oct 18, 2014 1:28:44 PM 
    org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions   
    INFO: Loading XML bean definitions from class path resource [beans.xml] Exception in  
    thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean 
    named 'helloBd1' is defined     at   org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:641)    at
org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1157)   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:280)    at 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)     at 
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)     at MainApp.main(MainApp.java:8)

好的,请查看我的beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="helloBd2" class="HelloWorld" scope="singleton">
        <property name="message" value="foo with blah blah.."/>
    </bean>

</beans>

第二个问题: 为什么此程序作为输出返回...

Message: fooo..
Message: fooo..

必须假设将输出返回为:

Message: fooo..
Message: foo with blah blah..

因为我确实将我的值更改为beans.xml所以它必须与bean配置文件一样好,不幸的是没有这样的事情发生!为什么?

请帮忙!

帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我不知道你在哪里

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'helloBd1' is defined at

您的问题中没有任何内容涉及helloBd1 bean。

对于输出,您已将bean声明为

<bean id="helloBd2" class="HelloWorld" scope="singleton">

也就是说,它具有 singleton 范围。这意味着两者

HelloWorld obj1=(HelloWorld) context.getBean("helloBd2");
HelloWorld obj2=(HelloWorld) context.getBean("helloBd2");

是检索您最初调用的对象

obj1.setMessage("fooo..");

可能会将邮件更改为fooo..