spring 源码分析 应用上下文层级关系

应用层级分析:
级 别类 型类名注 释作用
A1接口ApplicationContext应用上下文(环境获取、 bean容器、 消息资源、 事件发布器、 资源加载器)
B1接口WebApplicationContextweb应用上下文( ServletContext 获取、 属性名称的定义{作用域, 服务上下文, 上下文参数和属性})
C1接口ConfigurableWebApplicationContext配置web应用上下文(设置ServletContext、 设置和获取ServletConfig、 设置和获取configLocation)
B2接口ConfigurableApplicationContext配置应用上下文(设置环境、 添加BeanFactory后置处理器、 添加应用监听器、 获取容器、 刷新、 属性名称的定义{转换服务, 环境, 系统属性, 系统环境})
C2抽象类AbstractApplicationContext抽象应用上下文(核心类 refresh() 方法 刷新应用上下(其中12步操作))

应用接口

ApplicationContext 继承 EnviromentCapable, ListableBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver 接口

AbstractApplicationContext 上下文核心类 (通用的上下文功能)

抽象实现的 org.springframework.context.ApplicationContext 接口。不要求配置使用的存储类型;简单地实现通用的上下文功能。使用模板方法设计模式,需要具体的子类来实现抽象方法。

主要方法 refresh() 作用就是刷新应用上下文。 (12步操作)
spring 源码分析 应用上下文刷新


AbstractRefreshableApplicationContext 核心容器 (DefaultListableBeanFactory)

继承 org.springframework.context.support.AbstractApplicationContext 抽象类。 创建 Bean 容器,并加载 Bean。

1、refreshBeanFactory() 实现上级抽象方法, 用于创建 DefaultListableBeanFactory 容器
2、loadBeanDefinitions(DefaultListableBeanFactory) 定义抽象方法, 留给子类实现。 用于加载 BeanDefinition


AbstractRefreshableConfigApplicationContext 资源路径 (configLocations)

配置资源加载路径作为给 loadBeanDefinitions(DefaultListableBeanFactory) 方法加载 BeanDefinition 解析使用。


AbstractRefreshableWebApplicationContext web应用上下文 (ServletConfig、 ServletContext)

实现 ConfigurableWebApplicationContext 接口可以设置 ServletConfig、 ServletContext 对象。

主要实现类有 AnnotationConfigWebApplicationContextXmlWebApplicationContext 这二个web应用上下文。
loadBeanDefinitions() 为最后实现方法