欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

BeanFactory和ApplicationContext的异同

程序员文章站 2022-07-05 10:34:00
相同: Spring提供了两种不同的IOC 容器,一个是BeanFactory,另外一个是ApplicationContext,它们都是Java interface,ApplicationContext继承于BeanFactory(ApplicationContext继承ListableBeanFa ......

相同:

  • spring提供了两种不同的ioc 容器,一个是beanfactory,另外一个是applicationcontext,它们都是java interface,applicationcontext继承于beanfactory(applicationcontext继承listablebeanfactory。
  • 它们都可以用来配置xml属性,也支持属性的自动注入。
  • 而listablebeanfactory继承beanfactory),beanfactory 和 applicationcontext 都提供了一种方式,使用getbean("bean name")获取bean。

beanfactory 获取bean注册信息

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 获取bean注册信息

public class helloworldapp{ 
   public static void main(string[] args) { 
      applicationcontext context=new classpathxmlapplicationcontext("beans.xml"); 
      helloworld obj = (helloworld) context.getbean("helloworld");    
      obj.getmessage();    
   }
}

但是他们在工作和特性上有一些不同:

  • 当你调用getbean()方法时,beanfactory仅实例化bean,而applicationcontext 在启动容器的时候实例化单例bean,不会等待调用getbean()方法时再实例化。
  • beanfactory不支持国际化,即i18n,但applicationcontext提供了对它的支持。
  • beanfactory与applicationcontext之间的另一个区别是能够将事件发布到注册为监听器的bean。
  • beanfactory 的一个核心实现是xmlbeanfactory 而applicationcontext 的一个核心实现是classpathxmlapplicationcontext,web容器的环境我们使用webapplicationcontext并且增加了getservletcontext 方法。
  • 如果使用自动注入并使用beanfactory,则需要使用api注册autowiredbeanpostprocessor,如果使用applicationcontext,则可以使用xml进行配置。
  • 简而言之,beanfactory提供基本的ioc和di功能,而applicationcontext提供高级功能,beanfactory可用于测试和非生产使用,但applicationcontext是功能更丰富的容器实现,应该优于beanfactory