应用层级分析:
级 别 | 类 型 | 类名 | 注 释 | 作用 |
---|---|---|---|---|
A1 | 接口 | ApplicationContext | 应用上下文 | (环境获取、 bean容器、 消息资源、 事件发布器、 资源加载器) |
B1 | 接口 | WebApplicationContext | web应用上下文 | ( 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 对象。
主要实现类有 AnnotationConfigWebApplicationContext
、 XmlWebApplicationContext
这二个web应用上下文。
loadBeanDefinitions() 为最后实现方法