一、背景
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,一个标识。