持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
在前面的文章中我们介绍过,Spring 框架的IOC 容器是一个IOC Service Provider,它除了具有IOC 的功能之外,它的本质还是一个“容器”。换句话说,Spring IOC 容器就是一个提供了IOC 支持的一个轻量级容器。
对于Spring IOC 容器来说,除了基本的IOC 支持以外,它作为轻量级容器还提供了IOC 之外的一些支持。如在IOC 容器之上,Spring 还提供了相应的AOP 框架支持等。
对于Spring IOC 容器和IOC Service Provider 所提供的服务之间存在一定的交集,二者的关系如图所示:
对于上面的内容,总结来说,Spring IOC 容器不仅仅实现了IOC 的功能,还提供了一些AOP 等等相关的内容。
从这篇文章开始,我们介绍Spring 提供的两种容器类型:BeanFactory 和ApplicationContext。
BeanFactory
BeanFactory 是一个基础类型的IOC 容器,它提供了完整的IOC 服务的功能。它默认使用延迟初始化策略,即不使用不加载。如果用户指定相关的加载策略,那么就按照用户指定的方式来完成加载。
所以说,使用这个容器,它的初期速度是比较快的,使用的资源是有限的。如果对于资源不丰富且功能要求、载入速度不是很严格的场景,使用BeanFactory 是很合适的IOC 容器。
ApplicationContext
ApplicationContext 是基于BeanFactory 构建的一个容器,相对于BeanFactory 来说是一个比较高级的实现。它具有所有的BeanFactory 的功能实现,同时还提供了很多ApplicationContext 独有的功能,如发布事件、支持国际化等等。
同时加载模式与BeanFactory 不同的是,ApplicationContext 默认的不是懒加载方式,而是会将容器中左右的对象全部加载完成,并完成对象之间的绑定关系。所以说,对比BeanFactory,ApplicationContext 需要的资源更多。因此,ApplicationContext 比较适合于资源丰富,且对性能要求比较高的场景。
BeanFactory 的其他概念
BeanFactory 就是一个“生产Bean”的工厂。
但是对于“生产过程”并不是简简单单的给其原料,则立刻产生Bean 的过程。
Spring 框架提倡使用POJO,所以说,Spring 框架喜欢把每个业务对象看多是一个Java Bean 对象,这样一来,我们就可以比较明显地理解了为什么Spring IOC 基本容器会起名叫做“Bean Factory”了。
由于BeanFactory 的存在角色,它相当于一个“工厂”,我们只需要从各个位置取得相应的零件,然后送入工厂,最后在流水线处等待取出成品即可。
所以再回到我们的开发中,对于客户端来说,与BeanFactory 打交道其实很简单。最基本地区思考,BeanFactory 肯定会公开一个接口,用来获取组装完成的产品。
总结
这篇文章主要介绍了Spring 提供的两种容器类型以及其特点。接下来的文章会针对这两种类型的IOC 容器做具体的介绍。