Spring源码由浅入深系列二 类结构
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
- 踩
Spring源码由浅入深系列二 类结构的更多相关文章
- Spring源码由浅入深系列一 简介
概述: Spring是一个企业级的开源框架.它提供轻量级的依赖注入.面向切面编程.全方位的整合框架.下图是Spring框架的组成部分,各部分内容作了简单说明. 依赖注入: 依赖注入是S ...
- Spring源码由浅入深系列三 refresh
spring中的refresh是一个相当重要的方法.它完成IOC的第一个阶段,将xml中的bean转化为beanDefinition.详细说明如上图所示. 在上图中,创建obtainFreshBean ...
- Spring源码由浅入深系列六 CreateBean过程
- Spring源码由浅入深系列五 GetBean
获取bean的过程如上图所示.下一章将继续图示讲解createBean的过程.
- Spring源码由浅入深系列四 创建BeanFactory
继上一章refresh之后,上图描述了obtainFreshBeanFactory过程.
- spring源码分析系列 (1) spring拓展接口BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor
更多文章点击--spring源码分析系列 主要分析内容: 一.BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor简述与demo示例 ...
- spring源码分析系列 (3) spring拓展接口InstantiationAwareBeanPostProcessor
更多文章点击--spring源码分析系列 主要分析内容: 一.InstantiationAwareBeanPostProcessor简述与demo示例 二.InstantiationAwareBean ...
- spring源码分析系列 (2) spring拓展接口BeanPostProcessor
Spring更多分析--spring源码分析系列 主要分析内容: 一.BeanPostProcessor简述与demo示例 二.BeanPostProcessor源码分析:注册时机和触发点 (源码基于 ...
- Spring源码解析系列汇总
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源 ...
随机推荐
- 深入浅出 Vue.js 第九章 解析器---学习笔记
本文结合 Vue 源码进行学习 学习时,根据 github 上 Vue 项目的 package.json 文件,可知版本为 2.6.10 解析器 一.解析器的作用 解析器的作用就是将模版解析成 AST ...
- Vlan的相关知识点收纳
Q.思科Vlan的上限个数是多少? VLAN的范围:根据平台和软件版本不同,Cisco交换机最多支持4096个VLAN.VLAN号共有4096个,0-4095 0,4095:这两个号保留,仅限系 ...
- AcWing 199. 余数之和 (除法分块)打卡
给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值. 例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod ...
- s13 day3作业
ha_proxy配置文件修改程序ha_file 为存储配置信息的文件.运行的时候对该文件进行操作.1.查询信息:用户输入域名,获得域名相关信息2.修改配置文件:用户输入的格式应该为 {"ba ...
- 工具类--Excel 导出poi
实现功能 --批量导出excel 文件,配置一个sheet多少条数据,根据查询数据量的多少确定生成几个sheet页. pom 文件导入ExcelUtils工具包,依赖于poi包. <!-- ht ...
- PAT_A1059#Prime Factors
Source: PAT A1059 Prime Factors (25 分) Description: Given any positive integer N, you are supposed t ...
- 并发基础篇(六):线程Thread类的start()方法和run()方法【转载】
[转载] 一.初识java的线程是通过java.lang.Thread类来实现的.VM启动时会有一个由主方法所定义的线程.可以通过创建Thread的实例来创建新的线程.每个线程都是通过某个特定Thre ...
- Front Page
General Team FST stay night from ShanDong University 19 - 20 CCPC QinHuangDao Gold (4 th) IUPC YinCh ...
- vs2013 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”。是否缺少程序集引用?
参考博文: 解决办法:添加引用/com/Microsoft Office 11.0 Object Library 然后在程序中 C#代码 using Microsoft.Office.Interop. ...
- jeecg问题汇总
(1)使用代码生成器后记得修改spring扫描配置路径entity,dao,control control在jeecg\src\main\resources\spring-mvc.xml中配置 ent ...