spring是一个类之间依赖的管理容器,大家都知道,但我们中很多人都仅仅停留在使用的层面,但spring本身具有极大的研究价值,所以在使用了几年spring之后,还是想深入的探究一下其根源。记录于此,愿与各位共享。

spring有很多功能模块,从spring的官网doc 我们可以看到其分了29个部分,当然主要内容是从chapter 5 IoC开始的。现在来说明一下接下来要各个部分,我们要分析的内容。对于每个大的模块,我们会深入分析各个模块的源码,深入理解这些实现方式,并通过scala来实现一个山寨的框架,用Scala是不想直接抄袭,可以说是照葫芦画瓢。刚刚说了,spring是个大集成,她不仅仅有设计良好的各个模块用以支撑各类之间的dependences,并且有支持很多其他框架的接口模块,这个对我们来说是额外的收获,所以在后面的各个模块中,其他的那些第三方框架,咱也不会落掉任何一个,理解他们我们可以更加深入的理解spring是如何包容第三方框架。尤为可喜的是spring在尽力支持第三方框架的最新版本。能坚持下去,咱还是能有点收获的。

spring的开放源码在GitHub上,别跟外国人客气,尽情的去把他们的优秀的成果down下来。这里要特别说明一下如何将spring源码导入到Eclipse。

现在spring把源码各个模块里面的pom文件都删除了,我们就不能直接用maven来导入了,pity! 他们现在使用gradle来管理项目。

第一步是搭建你的gradle环境:

Eclipse的gradle插件的update site: http://dist.springsource.com/release/TOOLS/gradle,只需要选择“extensions / gradle integration”. 通过Eclipse --> Help --> Install New Software... 来安装。耐心的安装上plugin之后,去下源码,git clone https://github.com/spring-projects/spring-framework.git

download完成后,先别急导入到Eclipse,看看github项目里面说的,配置prerequisites:需要git和jdk8(Git and OpenJDK 8 early access build 100 or later
),请注意那里面的提示:一定要把JAVA_HOME指向jdk1.8.0.

接下来进入源码路径, 运行import-into-eclipse.sh(linux/Mac).这一步你就照着提示做下去就可以了。比较苦逼的是能否一次性把所有依赖包都下下来,如果不能一次性得到最终的complete提示,你就多试几次吧。我就碰到好几次运行到中途就卡住了,一直在build一个模块,实际上就是在下载对应jar依赖包。于是我就取消(ctrl+c),再重新运行,用了一个晚上终于成功看到了最后complete的提示。

设置Eclipse的jdk环境变量,这里就不多说了,但是将默认的选择成jdk1.8.0.

现在可以导入到Eclipse了,在workspace里面import-->Gradle --> Gradle project, 选择你的spring源码路径,会有提示说要build model,那就build吧。

build完成后,把run before 和run after两个选项去掉,finish!

一切都成功的话,你会看到各个模块都是有包结构的,否则就会有很多编译错误。 Wish you good luck!

如果有什么问题,尽情留言,咱怎么的也能解决掉,你说呢?

转载请注明出处。

Dive into Spring framework -- 搭建spring 源码的开发环境的更多相关文章

  1. GEF入门实例_总结_01_教程、源码、开发环境准备

    一.前言 最近在学Eclipse插件开发,发现了一个比较好的GEF入门教程,并且按照教程上的操作,一步步实现了一个入门Demo,在此感谢作者的贡献. 好记性不如烂笔头,故决定总结一下这段时间的学习心得 ...

  2. 基于Ubuntu系统搭建以太坊go-ethereum源码的开发环境

    第一.先安装geth的CLI环境sudo apt-get install geth,这个很重要 第二.下载源代码 git clone https://github.com/ethereum/go-et ...

  3. 在eclipse中配置spark 0.9.1源码的开发环境

    一.准备工作: 1.下载release版spark 0.9.1,本次用的版本是spark-0.9.1-bin-cdh4. 2.下载scala IDE 3.0.2,这个版本ide的支持scala 2.1 ...

  4. Centos7 下Boost 1.61.0源码 配置开发环境

    1 下载地址 https://sourceforge.net/projects/boost/files/boost/1.61.0/ boost_1_61_0.tar.gz 2 卸载系统自带的boost ...

  5. Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)

    Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...

  6. Spring框架之AOP源码完全解析

    Spring框架之AOP源码完全解析 Spring可以说是Java企业开发里最重要的技术.Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Orie ...

  7. Spring框架之jdbc源码完全解析

    Spring框架之jdbc源码完全解析 Spring JDBC抽象框架所带来的价值将在以下几个方面得以体现: 1.指定数据库连接参数 2.打开数据库连接 3.声明SQL语句 4.预编译并执行SQL语句 ...

  8. 【Spring】Spring IOC原理及源码解析之scope=request、session

    一.容器 1. 容器 抛出一个议点:BeanFactory是IOC容器,而ApplicationContex则是Spring容器. 什么是容器?Collection和Container这两个单词都有存 ...

  9. spring boot 2.0 源码分析(一)

    在学习spring boot 2.0源码之前,我们先利用spring initializr快速地创建一个基本的简单的示例: 1.先从创建示例中的main函数开始读起: package com.exam ...

随机推荐

  1. JS获取当前网页大小以及屏幕分辨率等

    网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...

  2. JS代码识别扫码设备

    <!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8" ...

  3. git 的 pull、fetch、merge

    1.pull = fetch + merge In the simplest terms, git pull does a git fetch followed by a git merge. You ...

  4. CentOS7.3 jdk、tomcat 安装步骤

    jdk.tomcat 安装步骤 一.jdk 安装步骤 1.登录root用户 su - root 2.创建install目录 mkdir -p /usr/install 3.复制 对应的jdk 和tom ...

  5. 最简单的win7、win8免费升级正版win10图文教程

    https://www.microsoft.com/zh-cn/software-download/windows10 http://jingyan.baidu.com/article/19192ad ...

  6. kettle添加hadoop cluster时报错Caused by: java.lang.IllegalArgumentException: Does not contain a valid host:port authority: hadoop:password@node56:9000

    完整报错是: Caused by: java.lang.IllegalArgumentException: Does not contain a valid host:port authority: ...

  7. JVM类加载器工作流程

    类加载器 classloader:谈到类加载,不得不提的就是负责此项工作的类加载器classloader,classloader的职责是将Java源文件编译后的字节码文件加载到内存中去执行. 类加载至 ...

  8. linux automake使用

    一篇文章: 一.Makefile介绍 Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有 ...

  9. 转:在0~N(不包括N)范围内随机生成一个长度为M(M <= N)且内容不重复的数组

    1. 最朴素暴力的做法. void cal1() { , j = , num = ; int result[M]; result[] = rand() % N; //第一个肯定不重复, 直接加进去 ; ...

  10. TWebBrowser静音

    procedure TForm1.FormCreate(Sender: TObject); var   hDSound: Cardinal;   pDirectSoundCreate: Pointer ...