java - 为什么我的示例中需要具有相同名称的 bean?为什么当我将 bean 文件的值更改为 bean 配置文件时,它永远不会返回我的输出?

标签 java spring spring-mvc output

我完全是Spring框架的初学者。我当时正在玩一个创建对象实例的示例。因此需要您的帮助!

看看这个例子:

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 时,它必须与 beans 配置文件一起使用,不幸的是,没有发生这种情况!为什么?

请帮忙!

帮助将不胜感激!

最佳答案

我不知道你从哪里得到

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

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

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

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

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

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

正在检索您最初调用的同一对象

obj1.setMessage("fooo..");

大概将消息更改为fooo..

关于java - 为什么我的示例中需要具有相同名称的 bean?为什么当我将 bean 文件的值更改为 bean 配置文件时,它永远不会返回我的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26437605/

相关文章:

java - 如何处理响应代码?

java - 使用 SpringMVC,未注入(inject) DaoImpl

java - 实时获取Facebook用户登录状态

java - 自定义布局 Swing 应用程序

java - 每次将软件分发给新用户时都手动为软件创建新数据库?

java - 尝试设置 spring servlet 时获取 "WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI ..."

java - JPA 何时设置 @GeneratedValue @Id

java - 如何在 Spring RequestHandlerRetryAdvice 中以指数方式增加重试间隔

java - 将 Grails 应用程序从 2.2 升级到 2.4 时出错

java - 一个上游事件包含多个项目,如何以事务方式设置 Spring 集成管道