zoukankan      html  css  js  c++  java
  • 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:Repositoryorgspringframeworkspring-core4.1.9.RELEASEspring-c
    ore-4.1.9.RELEASE

           jar cvf spring-cglib-repack-3.2.5.jar orgspringframeworkcglib

      jar cvf spring-objenesis-repack-2.6.jar orgspringframeworkobjenesis

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

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

      

  • 相关阅读:
    AngularJS启动过程分析
    mongodb 基本用法大全
    bitbucket工程改名导致 repository does not exist. fatal: Could not read from remote repository.
    分散的配置文件VS集中的注册表
    让browserify接收命令行参数,在打包时parse yml配置文件
    vscode下ts-node传入cli参数
    d3 .each()
    d3选择全部子节点,不知道class和id
    d3 parse字符串形式的xml svg and append to element
    在浏览器端用es6,babel+browserify打包
  • 原文地址:https://www.cnblogs.com/panie2015/p/8033427.html
Copyright © 2011-2022 走看看