BeanFactory和ApplicationContext的区别是什么

  介绍

这篇文章主要讲解了“BeanFactory和ApplicationContext的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“BeanFactory和ApplicationContext的区别是什么”吧!


什么是Spring Bean

这是一个非常简单而又很复杂的问题,通常来说,Spring Bean就是被春容器所管理的Java对象,来看一个简单的例子

 package  com.zoltanraffai;,,
  {public  class  HelloWorld 
  ,,private  String 信息,,,
  ,,public  void  setMessage (String 消息){,
  ,,,,,,,=,this.message 消息,,
  ,,},,
  ,,public  void  getMessage () {,
  ,,,,,System.out.println (“My  Message ,:,“, +,消息),,
  ,,},
  }

在基于XML的配置中,bean。xml为春容器管理bean提供元数据

什么是春容器

春容器负责实例化,配置和装配Spring bean,下面来看如何为国际奥委会容器配置我们的HelloWorld POJO

 & lt; ? xml  version =,“1.0“, encoding =,“UTF-8" ?比;=& lt; beans  xmlns “http://www.springframework.org/schema/beans"
  ,,xmlns: xsi =,“http://www.w3.org/2001/XMLSchema-instance"
  ,,xsi: schemaLocation =癶ttp://www.springframework.org/schema/beans
  ,,,http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"的在
  ,,& lt; bean  id =,“helloWorld", class =,“com.zoltanraffai.HelloWorld"比;
  ,,,,,& lt; property  name =,“message", value =,“Hello 世界!“/比;
  ,,& lt;/bean>
  & lt;/beans> 

现在,它已经被春容器管理了,接下来的问题是:我们怎样获取它?

BeanFactory和ApplicationContext的不同点

BeanFactory接口

这是一个用来访问春容器的根接口,要访问春容器,我们将使用春天依赖注入功能,使用BeanFactory接口和它的子接口<强>特性:

<李>

Bean的实例化/串联通常情况,BeanFactory的实现是使用懒加载的方式,这意味着Bean只有在我们通过getBean()方法直接调用它们时才进行实例化实现BeanFactory最常用的API是XMLBeanFactory这里是如何通过BeanFactory获取一个Bean的例子:

 package  com.zoltanraffai;,,
  import  org.springframework.core.io.ClassPathResource;,,
  import  org.springframework.beans.factory.InitializingBean,
  import  org.springframework.beans.factory.xml.XmlBeanFactory,
  public  class  HelloWorldApp {,
  ,,public  static  void  main (String [], args), {,
  ,,,,,XmlBeanFactory  factory =, new  XmlBeanFactory  (new  ClassPathResource (“beans.xml")),,
  ,,,,,HelloWorld  obj =, (HelloWorld), factory.getBean (“helloWorld");,,,,
  ,,,,,obj.getMessage (),,,,,
  ,,}
  }

ApplicationContext接口

ApplicationContext是春天应用程序中的中央接口,用于向应用程序提供配置信息它继承了BeanFactory接口,所以ApplicationContext包含BeanFactory的所有功能以及更多功能!它的主要功能是支持大型的业务应用的创建<强>特性:

<李>

Bean实例化/布线

<李>

Bean的实例化/串联

<李>

自动的BeanPostProcessor注册

<李>

自动的BeanFactoryPostProcessor注册

<李>

方便的MessageSource访问(i18n)

<李>

ApplicationEvent的发布与BeanFactory懒加载的方式不同,它是预加载,所以,每一个Bean都在ApplicationContext启动之后实例化这里是ApplicationContext的使用例子:

 package  com.zoltanraffai;,,
  import  org.springframework.core.io.ClassPathResource;,,
  import  org.springframework.beans.factory.InitializingBean,
  import  org.springframework.beans.factory.xml.XmlBeanFactory,
  public  class  HelloWorldApp {,
  ,,public  static  void  main (String [], args), {,
  ,,,,,ApplicationContext 上下文=new  ClassPathXmlApplicationContext (“beans.xml");,
  ,,,,,HelloWorld  obj =, (HelloWorld), context.getBean (“helloWorld");,,,,
  ,,,,,obj.getMessage (),,,,,
  ,,}
  }

总结

ApplicationContext包含BeanFactory的所有特性,通常推荐使用前者。但是也有一些限制情形,比如移动应用内存消耗比较严苛,在那些情景中,使用更轻量级的BeanFactory是更合理的。然而,在大多数企业级的应用中,ApplicationContext是你的首选。

BeanFactory和ApplicationContext的区别是什么