springframework中提供了两种IOC容器类型分别是BeanFactory 和ApplicationContext ,容器来管理业务对象的构建、业务对象之间依赖绑定、管理对象的生命周期等。以下是两种类型容器的类图:
一、BeanFactory
BeanFactory 是 Spring 框架 IOC 容器的基础,提供完整的IOC服务支持。如果没有特殊指定,
BeanFactory 是延时加载的(lazy-load),在加载配置文件的时候 Bean 不会被实例化,当使用 getBean() 的时候才会实例化该 Bean。所以启动速度较快,所需要的资源有限。
二、ApplicationContext
ApplicationContext 是BeanFactory 子接口,拥有其的全部功能的同时还扩展了其他功能。
ApplicationContext 是即时加载的,在加载配置文件的时候就会配置所有的 Bean。另外ApplicationContext 还有扩展了基本容器的功能包括以下:
- 自动注册BeanFactoryPostPorcessor
- 自动注册BeanPostProcessor以及其它特殊类型bean的自动识别
- 继承MessageSource,因此支持国际化。
- 统一的资源加载策略。
- 容器内部事件发布
- 多配置模块加载的简化
三、总结
ApplicationContext 包含 BeanFactory 的所有特性,虽然 BeanFactory 相比 ApplicationContext 较为节省资源,但是官方仍然推荐开发者使用 ApplicationContext,同时,ApplicationContext 支持所有的 Bean 作用域,而 BeanFactory 仅支持 Singleton 和 Prototype 两个作用域,这在需要开发复杂的程序时,ApplicationContext 更加灵活。