您的位置:首页 > 编程语言 > Java开发

Spring源码学习

2016-02-28 12:29 381 查看
不知不觉已经工作快两年,期间也阅读过些许源代码,无奈未进行系统的归纳和总结,过一段时间就忘的一干二净。记得有个前辈说过,人类对于一些无序的东西很容易就忘了,现在看来很是有道理,于是便想借用博客的方式再学习一次。学习源码的过程是坎坷的,主要是因为源码的代码量都很大,没有一个清晰的目标和一个主要的学习线路,很容易就会钻进代码的森林里面找不到北,这里看一点,那里看一点,零零散散连不成一条完整的线,其结果就是看完之后一段时间全都忘光,收获甚微。那么在进入源码之前,先分析好主线,所谓磨刀不误砍柴工嘛,然后跟着这条主线顺藤摸瓜,你就会发现学习源码是一件愉快又上瘾的事。首先分析下Spring源码学习的主线。

Spring整体架构如下图所示,相信用过Spring的人都比较熟悉。



如图所示,IOC容器是整个Spring框架的核心基础部分,接下来便对IOC容器进行分析。 IOC中有个著名的概念,叫做控制反转,也有人叫依赖反转。所谓依赖就是对象间的引用关系,按照正常的编程习惯,对象间的依赖和引用关系都是交给某个具体的对象来进行管理的。但是这样就会有一个问题,试想如果一个项目很大的话,里面的对象数量成千上万,他们之间的引用关系将会变得非常复杂,管理这些依赖关系将会非常困难。而且对象之间的耦合性也很高。这时候如果把这些复杂的依赖关系交给IOC容器去管理,也就是反转,那将会极大的简化项目设计的复杂性。所以IOC容器的作用就是管理对象之间的引用关系。

接下来我们就来看看这个IOC容器是如何设计的。(主线来了)

IOC容器主要有两个系列,BeanFactory和ApplicationContext,工作中我们一般使用ApplicationContext。

在使用IOC容器之前,我们需要构造一个IOC容器。

构造一个IOC容器需要如下几个步骤:

第一步:资源的定位。所谓资源就是指Spring里众多的XML配置文件,要获取到配置文件里面的信息,首先是要找到它。

第二步:加载和解析资源文件。XML文件里面定义的一些节点,和Spring里面定义的数据结构不匹配,那么就需要按照Spring的解析规则将XML解析成Spring需要的。

第三步:将解析完的数据结构注册到IOC容器中。Spring中内部的数据结构叫BeanDefinition。

经过以上三个步骤之后,IOC容器已经构造好,但是还是不能被直接使用。BeanDefinition只是配置文件里的配置在IOC中建立的一个映射,对于IOC容器来说最重要的依赖关系都还没有注入呢,相当于光有一个壳,内容还没有填充。

这里又有个Spring中重要的概念,叫做依赖注入。依赖的意思上文中有提到过吧,就是对象的引用关系嘛,注入是个动词,个人理解为设置,那依赖注入的意思不就是设置对象的引用关系了哇。

接下来这个过程是容器的实例化。容器的实例化只有一步,就是依赖注入。

完成IOC容器的构造和实例化之后,完整的IOC就建立好了。主线分析好了,接下来便可以顺藤摸瓜的学习源码了哇。未完待续。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: