BeanFactory
BeanFacotry作为Spring的根容器对象,提供了对Bean的基础操作功能,包括实例化、配置、管理Bean等。
ApplicationContext
ApplicationContext对BeanFactory进行了进一步地封装,内置了BeanFacotry实例,不仅具备BeanFactory提供的所有功能,还提供了更丰富的配置管理BeanFacotry生命周期的能力。除此之外,ApplicationContext还额外提供了Spring事件管理机制,国际化/本地资源访问等能力
总体类图如下所示:
从ClassPathXmlApplicationContext实现类分析继承关系,来梳理相关类和接口功能,具体如下:
- ClassPathXmlApplicationContext:基于类路径下xml文件配置的Spring容器上下文。定义了根据资源路径创建Spring容器的相关构造函数入口。
- AbstractXmlApplicationContext:基于xml配置的针对ApplicationContext的基础实现类,封装了初始化XmlBeanDefinitionReader来加载BeanDefinitions的逻辑
- AbstractRefreshableConfigApplicationContext:封装了根据路径处理xml文件的逻辑,主要用来供子类如FileSystemXmlApplicationContext,ClassPathXmlApplicationContext等调用解析资源路径
- AbstractRefreshableApplicationContext:ApplicationContext的基础实现类封装了创建、初始化、刷新内置BeanFactory的相关功能逻辑,定义了
loadBeanDefinitions
抽象方法,供子类实现根据不同的方式加载BeanDefinitions,实现了createBeanFactory
,refreshBeanFactory
,hasBeanFactory
,getBeanFactory
,closeBeanFactory
等相关逻辑对BeanFactory的生命周期进行管理(具体创建、刷新核心逻辑由夫类AbstractApplicationContext实现),提供了customizeBeanFactory函数对内置的beanFactory进行进一步的定制 - AbstractApplicationContext:ApplicationContext的基础实现,提供了
refresh
方法实现创建BeanFacotry的核心逻辑,具体实现内容可参照refresh
函数:
public void refresh()