首先,我们谈谈关于Spring,我相信大家对于Spring都有过了解或者深入的探究过这个极其优秀的J2EE框架,但是目前本人对这个框架还是处于使用的阶段并没有细致的探索原理,也许这就是初级、中级、高级工程师的区别,我想在以后的日子通过源码的解读会对自己有很大的提升,也希望能持之以恒。
1.Spring的整体架构图

可能这样看来确实有些抽象,我做一下简单的介绍,因为我也是初学者,具体的目前我也不是很了解,就算去某处抄写下来感觉用处也不是很大,做一个简单的说明就可以了:
Core Container(核心容器)
核心容器包含core、beans,context和Expression Language模块
core为Spring的核心工具类,服务于其他子项目的方法调用。
beans提供IoC(控制反转)和依赖注入特性。
context模块构建在core和beans模块基础之上,提供类型JNDI注射器的框架式的对象访问方法。(说的较抽象,太具体的目前我也不是非常了解)。
Expression Language主要提供表达式,用于运行时查询和操纵对象。
Data Access/Integration(持久层支持模块)
Data Access/Integration包括JDBC、ORM、OXM、JMS和Transaction模块。
主要对数据访问进行封装,并提供交互层,利用ORM封装包,可以利用Spring的特性与持久层框架进行O/R映射,例如常用的Hibernate和Mybatis。
OXM提供一个Object/XML映射实现抽象层。
JMS包括一些制造和消费消息的特性。
Transaction支持编程和声明性的失误管理。
Web
为基于Web的应用程序提供上下文,其中包含Web、Web-Servlet、Web-Struts和Web-Porlet模块。
Web使用Servlet Listener初始化IoC容器及其一个Web的应用上下文。
Web-Servlet提供SpringMVC的实现。
Web-Struts提供对Struts框架整合的支持。
AOP(面向切面编程)
想必大家对这个特性非常熟悉了,我这里就不做介绍了。
Test
对单元测试JUnit等框架进行支持。
核心容器包含core、beans,context和Expression Language模块
core为Spring的核心工具类,服务于其他子项目的方法调用。
beans提供IoC(控制反转)和依赖注入特性。
context模块构建在core和beans模块基础之上,提供类型JNDI注射器的框架式的对象访问方法。(说的较抽象,太具体的目前我也不是非常了解)。
Expression Language主要提供表达式,用于运行时查询和操纵对象。
Data Access/Integration(持久层支持模块)
Data Access/Integration包括JDBC、ORM、OXM、JMS和Transaction模块。
主要对数据访问进行封装,并提供交互层,利用ORM封装包,可以利用Spring的特性与持久层框架进行O/R映射,例如常用的Hibernate和Mybatis。
OXM提供一个Object/XML映射实现抽象层。
JMS包括一些制造和消费消息的特性。
Transaction支持编程和声明性的失误管理。
Web
为基于Web的应用程序提供上下文,其中包含Web、Web-Servlet、Web-Struts和Web-Porlet模块。
Web使用Servlet Listener初始化IoC容器及其一个Web的应用上下文。
Web-Servlet提供SpringMVC的实现。
Web-Struts提供对Struts框架整合的支持。
AOP(面向切面编程)
想必大家对这个特性非常熟悉了,我这里就不做介绍了。
Test
对单元测试JUnit等框架进行支持。
其实个人觉得了解这些模块是做什么的就可以了,没必要深究里面到底有哪些类哪些很流弊的功能,具体的还是看源码来的快一些,当我们知道这些是如何实现的,那时我们就醒目了。
2.搭建Spring源码项目
1.登陆Spring官网Spting.io进行源码的下载
http://projects.spring.io/spring-framework/
2.点击Github的连接,会跳转到Spring的源码项目,然后选择Spring的版本,在点击Clone or download,这样Spring所有的子项目都会被打成一个zip文件。
3.解压文件到目录,但是此时不能导入Eclipse中,需要下载Gradle来下载项目所需Jar包并生成Eclipse的project文件等。
4.下载Gradle,地址: https://gradle.org/gradle-download/,点击 binary only distribution下载或者搜寻download进行下载。
4.下载Gradle,地址: https://gradle.org/gradle-download/,点击 binary only distribution下载或者搜寻download进行下载。
5.下载之后解压安装,并配置环境变量(不再累述,上网百度好多),配置成功之后,进入cmd窗口输入“gradle -version”,如果出现版本信息证明配置成功。
6.再次打开cmd窗口,切换到Spring的beans目录下,并输入gradle cleanIdea eclipse进行build工程,稍等片刻。。会出现build successful证明成功,此时会发现beans目录 下面出现.project等文件,可以顺利导入Eclipse。
(注:如果想一次性构建整个Spring项目,需要花费时间很长,做法就是切换到Spring的根目录,执行gradlew eclipse -x:eclipse,但是个人不建议这么做,也可能是我的电脑和网络太不好了,哈哈)
7.在导入之后,会发现项目有一个红色的叹号或者有编译错误:
叹号:
叹号:
(1)依赖工程:beans是依赖core工程的,所以按照上述方法build core子工程并导入exlipse即可
(2)依赖jar包:本人构建项目的时候,缺少两个Jar包(spring-cglib-repack.jar、spring-objenesis-repack.jar),无奈只能上网下载,我会将两个jar包放在csdn,大家随时下载即可。
(2)依赖jar包:本人构建项目的时候,缺少两个Jar包(spring-cglib-repack.jar、spring-objenesis-repack.jar),无奈只能上网下载,我会将两个jar包放在csdn,大家随时下载即可。
jar包下载地址:
https://download.youkuaiyun.com/download/liujiancheng521/9527855
编译错误:
(1)JDK版本不兼容:我下载的是Spring4.2依赖JDK1.8,所以必须为1.8版本或更高才兼容。
(2)Eclipse版本不兼容JDK版本:对于JDK1.8,我下载的Eclipse版本为Eclipse-j2ee-mars-2,地址: http://www.eclipse.org/downloads/
编译错误:
(1)JDK版本不兼容:我下载的是Spring4.2依赖JDK1.8,所以必须为1.8版本或更高才兼容。
(2)Eclipse版本不兼容JDK版本:对于JDK1.8,我下载的Eclipse版本为Eclipse-j2ee-mars-2,地址: http://www.eclipse.org/downloads/
8.这时项目不会出现问题了,最多就是有黄色的感叹号,这个也无所谓了,接下来我们就可以查看Spring的源码啦。