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源码前,我们要先做些什么。


0 0
原创粉丝点击