Spring源码解读前篇--Spring容器的设计
来源:互联网 发布:cocostudio mac 下载 编辑:程序博客网 时间:2024/06/06 00:30
看spring源码前,我们要做些什么
自己打算仔细的看一下spring的源码,深入的了解一下spring的原理。自己喜欢在分析源码之前看一下总体的设计思想。这篇文章就是在分析了ClassPathXmlApplicationContext类
的结构关系图之后。自己对Spring IOC容器设计的理解。类关系图如下:
先对上图做一下解释,因为这幅图没有遵循类关系图的标准,只是为了自己理解起来方便,看着舒服。
1.图中所有实线在代码中就是extends,虚线就是implements。
2.红色就是最顶层的接口。
3.绿色的是JDK自带的接口。
4.黄色是抽象类,淡黄色是类,其它的全是接口。
我这样做画的原因是如果我想知道一个类能用来做什么,我会看它所有外层接口的作用,如果我想知道某一个接口具体在哪实现的,我会先从顶层接口往下找,找到第一个
implements的地方。个人认为分出JDK定义的接口和框架本身的定义的接口,能加深自己对java本身的理解。
再说一点题外话,在看源码之前这些类的作用大部分我们都可能不知道是干什么用的,我是通过3个方法来它们的作用。
1.复制接口名,在官方文档中查,如果读文档仔细的话,发现大部分接口都有介绍。
2.看一下类的注释和属性。
3.上面俩个步骤都是很粗略的,如果还不懂,复制黏贴接口名,百度。
说了那么多有的没的,然后下面开始分析一下ClassPathXmlApplicationContext。
1.从所有顶层的接口来看,一个ClassPathXmlApplicationContext应用上下文可以有IOC容器的基本功能,访问资源,关闭资源,支持不同的信息源,应用事件,获取容器的上下
文,容器中的bean可以感知到容器的存在。
2.从BeanFactory往下看到ApplicationContext来看,发现一个应用上下文环境除了还有IOC容器的基本功能,还有双亲IOC容器功能,以及许多功能的细化。
3.以ApplicationContext为中心来看,ApplicationContext是应用上下文的顶层接口,一个最基本的应用上下文,除了具备IOC容器功能之外,还有四个作用,访问资源,支持不同的
信息源,应用事件,获取容器的上下文。
4.把BeanFactory和Application分开来看,我们可以发现我们常说的spring容器应该是指ApplicationContext,因为我们常用的都是WebApplicationContext和
ClassPathXmlApplicationContext,除了具备IOC容器的基本功能还有其它许多扩展功能,比如支持不同的信息源。而我们常说的IOC,就体现在BeanFactory上,一个基本的IOC
容器只需要可以访问Bean就行。也就是ApplicationContext就是在IOC容器基础上扩展了许多其它功能。
最后,之所以画这个图是为了自己更好的看源码,画完这个图,自己对着这个图看了俩小时之后,有如下结果。
1.我们肯定要告诉spring我们定义的文件在哪,spring怎么找到这个文件,把这个文件抽象成了什么?因为上图中并没有提现资源文件的地方。
2.肯定是先访问资源,然后在解析资源。解析资源是通过ResourceLoder,先看一下这个是怎么做的。
3.一个应用上下文有很多功能,不能在看的时候想找到每个功能实现的地方。要分开来看,先看IOC容器的基本实现,在看其它的。
4.看源码是为了理解spring原理,更主要的是为了更好的用spring,看的过程要总结一下自己之前没有使用过的一些功能,比如ApplicationEventPublisher,自己之前都没有听说过
spring的应用事件这一功能,这下要好好的研究。
结语
本来想把文章命名spring容器的设计,但是写完之后突然觉得应该叫看spring源码前,我们要先做些什么。
- Spring源码解读前篇--Spring容器的设计
- spring 源码解读与设计详解:8 Spring配置文件的读取与容器装配详析
- Spring:源码解读(IOC容器的初始化)
- Spring:源码解读(IOC容器的依赖注入)
- Spring:源码解读(IOC容器的高级特性)
- 源码解读(二): spring容器初始化的refresh操作
- Spring源码解读 IOC容器初始化
- Spring源码分析(一)-Spring IoC容器的设计
- Spring源码解读——Spring容器初始化 1
- Spring源码解读——Spring容器初始化 2
- Spring源码解读-Spring IoC容器初始化之资源定位
- Spring源码解读-Spring IoC容器初始化之资源解析
- Spring源码解读-Spring IoC容器初始化之资源注册
- spring 源码解读与设计详解: 7 BeanDefinitionParserDelegate深入解读
- spring beans源码解读之 ioc容器之始祖--DefaultListableBeanFactory
- spring beans源码解读之 ioc容器之始祖--DefaultListableBeanFactory
- spring beans源码解读之 ioc容器之始祖--DefaultListableBeanFactory
- spring容器及bean加载机制源码解读
- 判断TextView是否有内容省略
- Tensorflow RNN源代码解析笔记1:RNNCell的基本实现
- java字符串转换成时间Unparseable date错误的解决方案
- C++抽象编程——递归简介(2)——阶乘函数的执行分析
- tcp请求建立连接,结束连接握手过程
- Spring源码解读前篇--Spring容器的设计
- 读书笔记 effective c++ Item 25 实现一个不抛出异常的swap
- jstl获取list的长度大小
- Darwin Stream server(DSS服务器)的Relay(中继/转发)设置
- 生成排列 Generating Permutations
- JavaScript函数isFinite()
- 10954
- L
- 不能安装64位office提示已安装32位的