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就建立好了。主线分析好了,接下来便可以顺藤摸瓜的学习源码了哇。未完待续。。。。。。
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就建立好了。主线分析好了,接下来便可以顺藤摸瓜的学习源码了哇。未完待续。。。。。。
相关文章推荐
- struts2整合spring
- 23种设计模式详解(Java示例)->适用于所有OO语言
- JavaScipt学习中的高阶函数
- OC和Java的比较
- java开发webservice的几种方式(转)
- java生产者/消费者模式实现——一生产者一消费者(操作值)
- java基础--相等
- java练习3,去除容器中自定义的重复对象
- java中array,arraylist,iterator;
- <转> JAVA CAS原理深度分析
- 个人学习-java-非static静态代码块
- java应用命名规范(自己总结的哈)
- Java模板引擎Velocity基本语法
- java多线程编程总结
- Eclipse下配置heritrix
- Struts2总结
- Spring总结
- java版爱情
- Eclipse安装Android插件的问题
- 浅谈eclipse的.classpath