Spring 源码学习:day1

前言:

  最近也不知道该忙些什么样的事情。便随便看看源码算了。

正文:

  (1)

  在网上下载 Spring 的源码:

  可以采用 git 方式下载 https://github.com/spring-projects/spring-framework.git

git init
git remote add origin https://github.com/spring-projects/spring-framework.git
git pull origin master

或
git clone https://github.com/spring-projects/spring-framework.git

  (2)

  Spring 源码是采用 gradle 来编译的。至于 gradle 怎么安装,请参考 gradle 的安装

  打开命令窗口,将当前目录切换到源码所在目录(像看那部分就到哪部分的目录下),执行命令 gradle cleanidea eclipse

编译成功!

  将编译后的项目,直接导入到 Eclipse 中。嗯,我很闲,直接将整个项目编译了!

  好吧,为了看源码的方便。还是一个一个子项目的导入到项目中,因为项目中会有一些的依赖关联。工程名称前面有一个感叹号,说明存在错误。查看依赖包。

 

  (3)

  我们先从 spring-beans 分析起。

  导入 spring-beans ,查看其依赖,导入 spring-core 和 spring-jcl

 

  查看Jar 包依赖,缺少cglib-repack-3.2.5.jar和spring-objenesis-repack-2.4.jar

  为什么会缺少包?以及如何解决?参考: http://blog.csdn.net/ywb201314/article/details/53836812

  ·安装GitHub下载新版的spring源码到本地
  ·下载Gradle之后通过“gradle cleanIdea eclipse”命令将spring源码转换成可导入eclipse的工程
  ·导入足够的spring工程之后,会发现spring-core下缺少cglib-repack-3.2.5.jar和spring-objenesis-repack-2.4.jar两个包

  通过阅读源码发现为了避免第三方class的冲突,spring把最新的cglib和objenesis给repack了,
  而且并没有提供这部分的代码在源码里,直接在jar包当中。

根据package-info的提示可以到http://cglib.sourceforge.net和http://objenesis.org中下载最新的两个包,
但并不符合spring框架本身的结构。

找一个 spring-core 的jar 包。(以前跑项目运行的。重新下载的。都可以。至于版本,我也不知道,看你的源码用的哪个版本吧)

比如我,将原本 maven 下载的 spring-core 架包解压。打开cmd 进入到解压目录下。执行打包命令

 

      cd /d E:\Repository\org\springframework\spring-core\4.1.9.RELEASE\spring-c
ore-4.1.9.RELEASE

       jar cvf spring-cglib-repack-3.2.5.jar org\springframework\cglib

  jar cvf spring-objenesis-repack-2.6.jar org\springframework\objenesis

 

将生成的jar包,导入到缺失jar包的项目中

 

参考:《Spring源码深度解析》 

 

  

posted @ 2017-12-13 16:12  panie2015  阅读(296)  评论(0编辑  收藏  举报