Spring中ApplicationContext和beanfactory区别

时间:2022-09-08 21:29:23

BeanFacotry是spring中比较原始的Factory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。 
ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能。ApplicationContext以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,ApplicationContext包还提供了以下的功能: 
  • MessageSource, 提供国际化的消息访问  
  • 资源访问,如URL和文件  
  • 事件传播  
  • 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层  

具体来说 2者有如下几点区别:
1. ApplicationContext是BeanFactory的子接口,具有BeanFactory的所有功能,此外,还提供了其他功能,如:资源访问,事件机制等。
2.BeanFactory只能以java编程显示创建,而ApplicationContext能以声明的方式创建,如使用ContextLoader。当然你也编程的方式创建ApplicationContext实例 。 
3.BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Singleton作用域的Bean以及这些Singleton作用域的bean所引用的bean。这样,在容器启动时,ApplicationContext实例化过程比BeanFactory实例化过程时间和内存开销大,但是我们可以在容器初始化阶段就发现Spring中存在的配置错误。