Spring源码由浅入深系列二 类结构
来源:互联网 发布:linux 查看hba 编辑:程序博客网 时间:2024/05/17 22:49
BeanFactory
上一章中,我们提过Spring的依赖注入容器是BeanFactory。BeanFactory是一个基础接口,它有一个默认实现类:DefaultListableBeanFactory。我们可以由它为出发点看看Spring的类层次结构。如下图所示:上图中,有一个值得我们学习的设计方法。DefaultListableBeanFactory类实现了ConfigurableListableBeanFactory接口。然后ConfigurableListableBeanFactory继承了接口ListableBeanFactory、AutowireCapableBeanFactory、ConfigurableBeanFactory三个接口。但是DefaultListableBeanFactory类只专注实现ListableBeanFactory接口,其它的实现交给它的继承父类AbstractAutowireCapableBeanFactory。这样的设计思路在Spring代码类中随处可见。
从图中我们可以看到BeanFactory有三个直接子接口: AutowireCapableBeanFactory、HierarchicalBeanFactory、ListableBeanFactory。如下图:
ApplicationContext
上面整个是BeanFactory部分的类层次结构。但是我们在使用Spring的过程中,经常接触的是ApplicationContext。ApplicationContext是由BeanFactory派生而来,除具有BeanFactory的所有功能之外,还具有资源访问、国际化处理、强大的事件机制。在这里着重介绍一下ApplicationContext的事件机制。它是通过ApplicationEvent和ApplicationListner这两个接口来提供的。当ApplicationContext中发布一个事件时,所有扩展ApplicatonListener的Bean都将会接受这个事件,并进行相应的处理。
Spring提供了部分内置事件,主要有以下几种:
ContextRefreshedEvent:ApplicationContext发送该事件时,表示该容器中所有的Bean都已经被装载完成,此ApplicationContext已就绪可用。
ContextStartedEvent:生命周期beans的启动信号
ContextStoppedEvent:生命周期beans的停止信号
ContextClosedEvent:ApplicationContext关闭事件,则context不能刷新和重启,从而所有的singleton bean全部销毁。
好了,还是让我们来看看ApplicationContext的类层次结构,如下图所示:
从图中可以看出,ApplicationContext采用继承结构,每层完成特定的工作。通过源码可以知道,Spring启动ApplicationContext容器的主要逻辑放在AbstractApplictionContext类的refresh方法中。Refresh方法应该是我们理解代码的大纲及难点。
请仔细查看并认真记忆以上两个UML图,在下一章,我准备剖析重点剖析refresh方法。
0 0
- Spring源码由浅入深系列二 类结构
- Spring源码由浅入深系列一 简介
- Spring源码由浅入深系列三 refresh
- Spring源码由浅入深系列四 创建BeanFactory
- Spring源码由浅入深系列五 GetBean
- Spring源码由浅入深系列六 CreateBean过程
- linux驱动由浅入深系列:驱动程序的基本结构概览之二(详解驱动注册过程)
- linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)
- spring源码学习之二 XmlWebApplicationContext类结构概述
- tomcat源码系列(二)--tomcat总体结构
- socket 由浅入深系列--------函数(二)
- SDWebImage源码学习之由浅入深 二
- spring源码系列-1
- Spring之AOP由浅入深
- Spring之AOP由浅入深
- Spring之AOP由浅入深
- Spring之AOP由浅入深
- Spring MVC处理请求过程(Spring MVC源码阅读系列之二)
- 仿淘点点 demo
- db数据库利用第三方框架进行提取和解析数据
- dubbo小教程
- 狗狗40题~ (Volume B)
- 关于Windows内存结构
- Spring源码由浅入深系列二 类结构
- eclipse导出可执行jar文件
- hdu-oj 1164 Eddy's research I
- 044:一对多,多对一双向关联
- 【Lucene3.0 初窥】文本分析器Analyzer
- NYOJ19,擅长排列的小明,StringBuffer.deleteCharAt()
- oracle中left join,right join,inner join用法
- make sure this plugin is properly configured & 任务管理器查看框
- 菜鸟的安卓实习之路----android广播(2)