
Spring系列 BeanFactory与ApplicationContext(超通俗易懂)
BeanFactory是Spring框架的最底层接口,是Spring框架的基础设施,里面包含了各种对于Bean的定义,读取Bean的配置文档,管理Bean的加载、实例化,控制Bean的生命周期,维护Bean之间的依赖关系。getBean,BeanFactory帮助我们创建对象,我们通过getBean从而去拿到创建完成的对象,而不是自己手动去new。(如下图, 很多getBean方法)
文章目录
一、什么是BeanFactory?
- BeanFactory是Spring框架的最底层接口,是Spring框架的基础设施,里面包含了各种对于Bean的定义,读取Bean的配置文档,管理Bean的加载、实例化,控制Bean的生命周期,维护Bean之间的依赖关系。
- 通俗的讲,BeanFactory最最典型的功能:getBean,BeanFactory帮助我们创建对象,我们通过getBean从而去拿到创建完成的对象,而不是自己手动去new。(如下图, 很多getBean方法)
- 表面上BeanFactory只能getBean,实际上,控制反转、基本的依赖注入、直到Bean的生命周期的各种功能都由它的实现类提供
二、什么是ApplicationContext?
- ApplicationContext是BeanFactory的子接口,由BeanFactory派生而来,通常成为Spring上下文,具有BeanFactory的基本功能。大概理解为BeanFactory有的,ApplicationContext都有(如下图)。
- 此外,ApplicationContext扩展了BeanFactory接口的功能
- 国际化
- 通配符方式获取一组 Resource 资源
- 整合 Environment 环境(能通过它获取各种来源的配置信息)
- 事件发布与监听,实现组件之间的解耦
三、BeanFactory与ApplicationContext的联系和区别
区别1(功能上)
如上述介绍所说:BeanFactory是Spring的最底层接口,定义了IOC的基本功能,包含:各种Bean的定义、加载、实例化、依赖注入以及生命周期的管理。ApplicationContext接口继承了BeanFactory,除了提供BeanFactory所具有的基本功能以外,它还提供了更完整的框架功能:他还继承了MessageSource,因此还支持国际化,资源文件访问等功能;
区别2(加载形式)
BeanFactory在初始化容器的时候,并未实例化Bean,直到需要使用某个Bean(调用getBean()方法) 时才实例目标Bean,导致不能及时发现可能存在的一些配置上的问题。
ApplicationContext 则在初始化应用上下文时就实例化所有单实例的Bean,我们可以及时的发现配置中有可能存在的问题;由于ApplicationContext启动后加载了所有的单实例Bean,所以运行时速度比较快;唯一的不足在于它占用内存空间,配置的Bean较多时,启动会比较慢。
区别3(后处理器BeanPostProcessor 、BeanFactoryPostProcessor )
BeanFactory与ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor使用,BeanFactory使用需要手动注册,ApplicationContext则自动注入。(不懂看后面的篇幅会有解释)
总结
- ApplicationContext 包含 BeanFactory 的所有特性,通常推荐使用前者。但是也有一些限制情形,比如移动应用内存消耗比较严苛,在那些情景中,使用更轻量级的 BeanFactory 是更合理的。然而,在大多数企业级的应用中,ApplicationContext 是首选。
- 简而言之,BeanFactory提供了配置框架和基本功能,ApplicationContext增加了更多针对企业的功能。ApplicationContext是BeanFactory的一个完整的超集。
更多推荐
所有评论(0)