getBean()方法在这里做什么?

时间:2016-07-16 05:15:48

标签: java spring getter

这里的getBean()方法是什么,它在程序中如何工作?

ApplicationContext aplicntxt = new 
ClassPathXmlApplicationContext("springconfig.xml");  

Hello h = (Hello) aplicntxt.getBean("springconfig.xml");  
h.display();

Hello h2 = new Hello();  //if I write this
h2.display();  

我的问题是为什么h2.display检索空值并且h.display通过springconfig.xml检索存储的值?

请告诉我是什么

ApplicationContext aplicntxt = new ClassPathXmlApplicationContext("springconfig.xml");

先做?

第一步是否将xml文件的所有值存储到pojo类设置器中?

然后我们将值存储到对象h 通过做

Hello h = (Hello) aplicntxt.getBean("springconfig.xml");

4 个答案:

答案 0 :(得分:3)

你的问题基本上是"春天如何工作",official documentation

广泛涵盖了这个问题

以下内容创建springconfig.xml定义的所有bean,即创建给定类型的对象,并注入您定义的任何属性,具体取决于您的确切配置,它也可以执行包扫描等操作,注释处理等。

ApplicationContext aplicntxt= new ClassPathXmlApplicationContext("springconfig.xml");

XML

<bean class="org.example.Hello" id="foo" />
<bean class="org.example.Hello" id="bar" />

这将创建一个Hello类型的对象,并用ID&#34; foo&#34;标记它们。和&#34; bar&#34;

所有bean都是根据其ID存储的,以便以后通过getBean()进行检索,请注意这将获取bean ID或名称,而不是XML文件。

Hello h = (Hello) aplicntxt.getBean("foo");

答案 1 :(得分:2)

您在代码中执行的操作称为Spring Dependency Injection,它允许您定义应用程序bean并在需要时注入它们。比如你在代码中使用的getBean()方法,它从XML文件中注入特定的bean。

答案 2 :(得分:1)

从快速查看,看来这段代码使用spring来初始化Hello对象,并使用在xml文件中找到的spring bean中指定的值(我假设&#39; s是什么&#39;在filr中,但是如果你发布它我会更具体。)当你创建第二个hello对象时,你使用的是构造函数的默认值display,它是null。

答案 3 :(得分:1)

  

From spring doc

接口org.springframework.context.ApplicationContext表示Spring IoC容器,负责实例化,配置和组装上述bean。容器通过读取配置元数据获取有关要实例化,配置和组装的对象的指令。配置元数据在XML, Java annotations, or Java code.中表示。它允许您表达组成应用程序的对象以及这些对象之间丰富的相互依赖性。

ApplicationContext interface的几个实现是与Spring一起开箱即用的。在独立应用程序中,创建ClassPathXmlApplicationContext or FileSystemXmlApplicationContext.实例很常见虽然XML是定义配置元数据的传统格式,但您可以通过提供少量XML配置来指示容器使用Java注释或代码作为元数据格式到declaratively启用对这些其他元数据格式的支持。

现在你的问题及其简单ApplicationContext激活对象(它是急切的容器)并查找声明的beans,以便在调用对象时加载它们。

现在考虑一下你是否有两个bean,你需要其中一个bean,你可以通过使用ctx.getBean("beanId")来加载实例并提供用这个bean声明的数据,beanId将告诉哪个对象到load

考虑以下示例

<bean id="a" class="package.Hello" /> //here it will look for bean name and then loads the class

现在当你把它称为

ApplicationContext ctx=new ClassPathXMLApplicationContext("configuration.xml");

//will look for configuration.xml bean file if it is not in path then throw execption.

现在

Hello hello=ctx.getBean("a");

// if configuration.xml contains any bean named "a" and holds reference to class(hello) load it immediately and return object of that class

相同
Hello hello=new Hello();
hello.method();

它正在使用Hello

创建xml类的对象