实际应用中使用SF第一个类就是ApplicationContext(见下图),肯定是非常重要的,我们的学习也从这里开始。
类作用
阅读类文件说明是非常重要的,有助于我们理解类的作用。由于框架中类的说明均比较详细,因此我们学习一个类的第一件事就是阅读类说明。另外:框架类使用标准的JavaDoc规范,需学习JavaDoc是如何使用的。
org.springframework.context.ApplicationContext就spring应用运行的容器,主要作用是构建应用运行的上下文环境,并通过读取配置元数据,负责实例化、配置和组装 bean。其具体职能如下:
1、提供访问应用程序Bean的Bean工厂方法(org.springframework.beans.factory.ListableBeanFactory)。
2、以通用方式加载文件资源(org.springframework.core.io.ResourceLoader)。
3、发布事件到已注册侦听器(ApplicationEventPublisher)。
4、解析消息,并支持国际化(MessageSource)。
5、提供容器继承能力:子容器继承父容器。例如整个web应用程序可以是单实例,每个servlet有它自己的子容器,继承于整个应用单实例,且独立于任何其他servlet的子容器。
6、除了标准的Bean生命周期功能,ApplicationContext实现了检测和调用bean,包括:ApplicationContextAware、ResourceLoaderAware,ApplicationEventPublisherWare、MessageSourceAware。
类关系
类关系图如下:
父类说明:
EnvironmentCapable:从环境中加载元数据或属性参数,并负责进行解析。
ListableBeanFactory:继承于BeanFactory,不用通过bean查找方式访问bean列表
HierarchicalBeanFactory:继承于BeanFactory,可按继承关系访问父Bean
MessageSource:消息解析,并支持消息的参数化和国际化
ApplicationEventPublisher:发布消息
ResourcePatternResolver:继承于ResourceLoader,负责资源加载和解析。
ApplicationContext作为应用容器,是业务类运行的基本环境,因此比较复杂。从关系图来看,该类继承了六个接口类(基本都是顶层类),本身也是接口类,从设计来说,具备非常灵活的架构,具体实现由实现类完成,理论上可以有多种实现方案。
类方法
ApplicationContext是纯接口类,只定义几个get-ApplicationContext本身信息的方法,容器能力来自继承的各个接口类。由此可体会到ApplicationContext就是个舞台,内容多少或能力大小是由各个被继承类来决定;并且根据发展需要,可随时追加更多的能力(继承新的接口类)。
ApplicationContext的实现见:https://blog.youkuaiyun.com/davidwkx/article/details/130666124