BeanFactory与ApplicationContext

136 阅读1分钟

一、背景

BeanFactory是一个提供了可以管理任何类型对象的高级配置接口,ApplicationContext的父接口。但无法支持spring插件,比如:AOP、Web应用等功能。

ApplicationContext相较于前者:

  • 可以整合AOP特性
  • 消息资源处理(用于国际化)
  • Event发布

平时关注的最重要的区别是:

BeanFactory是懒加载,项目启动时只实例化了该容器,而容器内的Bean并没有被实例化,当使用getBean()的时候才会实例化对应Bean

ApplicationContext是预加载,项目启动时不仅将bean全部进行了加载,与前者相比此方式在项目启动时耗时长,启动后要比前者快。很明显我们可以接受项目启动时耗时长,无法接受在处理业务时的时间消耗。

二、使用方式

(1) BeanFactory的用法

 //XmlBeanFactory是典型的BeanFactory,用于加载对应xml配置的容器
 BeanFactory factory = new XmlBeanFactory("xx.xml");
 //获取名字为beanName的Bean并在此时实例化
 factory.getBean("beanName");

(2)ApplicationContext的用法

//方法一:加载的是classpath下的配置文件。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//方法二:加载的是磁盘路径下的文件。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml");
//方法三:XmlWebApplicationContext,从web系统中加载。

People people = (People) applicationContext.getBean("people");
//在这当中getBean中的参数为你在配置文件下,这个对象的id,一个标识。