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源码深度解析》 

      

  • 相关阅读:
    docker学习
    redis哨兵部署
    HUE中一些重要元数据表的DDL整理
    Autosys中ON_HOLD和ON_ICE的区别
    Spark结构化API的执行过程——Logical Plan & Physical Plan
    关于Spark中Columns的引用方法
    关于Spark Dataset API中的Typed transformations和Untyped transformations
    关于Kafka Consumer 与 Partitions
    使用sed根据变量值注释掉文件中相匹配的记录行
    sqoop export to teradata时出现java.lang.NullPointerException
  • 原文地址:https://www.cnblogs.com/panie2015/p/8033427.html
Copyright © 2011-2022 走看看