Application是BeanFactory的子接口
Application提供相对更完整的功能:
- 继承了MessageSource,支持国际化
- 统一的资源的访问方式
- 同时加载多个配置文件
- 提供在监听器中注册Bean的事件
- 载入多个(有继承关系)上下文,是的每一个配置文件都专注于一个特定的层次
区别:
- BeanFactory是采用延迟加载技术,只有真正要使用到这个Bean的时候,才会去实例它。这样就会存在一个问题:如果Bean的某一个属性没有被注入,BeanFactory加载后,只有到Bean第一次调用getBean()的时候才会抛出异常。
- ApplicationContext实在应用启动的时候就会加载所有的Bean,这样可以帮助我们检查Spring中的配置错误,相关的依赖是否已经正常的被注入,确保你要是用的时候他就已经准备好了。
- 相对于BeanFactory,ApplicationContext的不足之处就是占用的内存高,应用启动的时候没有BeanFactory的快
- BeanFactory和ApplicationContext都支持BeanPostProsser、BeanFactoryPostProessor的使用,但是BeanFactory必须自己手写代码去注入,ApplicationContext是自动注入