spring中ApplicationContext与BeanFactory容器的区别

Posted The羿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring中ApplicationContext与BeanFactory容器的区别相关的知识,希望对你有一定的参考价值。

总体上说,IOC 是一种可以帮助我们解耦各业务对象间依赖关系的对象绑定方式,那么Spring 提供了两种容器类型来提供支持 IOC方式。这两种类型是:

  • BeanFactory: 基础类型的IOC容器,提供完整的IOC服务支持
  • ApplicationContext: ApplicationContext是在 BeanFactory的基础之上构建的,是相对高级的容器实现,除了拥有BeanFactory的所有支持,ApplicationContext提供了其他高级特性。

BeanFactory

BeanFactory的介绍

BeanFactory 是基础类型IoC容器,提供完整的IoC服务支持。如果没有特殊指定,默认采用延迟初始化策略(lazy-load)。只有当客户端对象需要访问容器中的某个受管对象的时候,才对该受管对象进行初始化以及依赖注入工作。

BeanFactory,就是生产 Java Bean 的工厂,作为Spring 提供的基本的IoC容器,BeanFactory 帮助完成 业务对象的注册和对象间依赖关系的绑定。

实际上,BeanFactory只是一个接口,它负责定义如何访问容器内管理的Bean的方法,各个BeanFactory的具体实现类负责具体Bean的注册以及管理工作。

从上图可以看出,BeanFactory有三个直接子类:

  • ListableBeanFactory: 通过继承该接口可以列出所有的Bean,也可以只列出与预期类型相对应的bean
  • HierarchicalBeanFactory: 支持分层bean的管理,使BeanFactory支持双亲IOC容器的管理功能
  • AutowireCapableBeanFactory: 可以填充不受Spring 控制的 Bean

ApplicationContext

ApplicationContext的介绍

ApplicationContext是在BeanFactory的基础上构建的,是相对比较高级的容器实现,除了拥有 BeanFactory的所有支持,ApplicationContext还提供了其他高级特性,比如:

  • 统一资源加载策略
  • 国际化信息支持
  • 容器内部事件发布机制

在ApplicationContext 容器启动之后,默认全部初始化并绑定完成,所以,对于BeanFactory来说,ApplicationContext 往往要求更多的系统资源

以上是关于spring中ApplicationContext与BeanFactory容器的区别的主要内容,如果未能解决你的问题,请参考以下文章

spring中ApplicationContext

Spring中ApplicationContext对事件的支持

06Spring源码-分析篇-ApplicationContext

Spring -- Spring相关API (ApplicationContext getBean)

Spring Framework中applicationContext.xml和spring-servlet.xml的区别

Spring Framework中applicationContext.xml和spring-servlet.xml的区别