我完全是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配置文件一样好,不幸的是没有这样的事情发生!为什么?
请帮忙!
帮助将不胜感激!
答案 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..
。