用了Spring几年,平时也断断续续在项目里看过一些源码,大多都是比较模糊的,因为一旦从一个地方进去就找不到方向了,只能知道它大概是做了什么事能达到这个功能或者效果,至于细节一般没有太深入去研究。后来才知道是学习方式有误,正常的应该是从它最原始的地方下手,至于学习Spring源码原因就是因为它的方便和快捷还有颠覆了传统的开发模式。例如刚开始学Servlet要编写大量的Servlet,然后又要New不同的对象,然后又要在业务层调用JDBC,还要手动开关事务,还要处理异常等等。Spring核心就是IOC和AOP,所以接下来主要是想系列化的去研究ioc和aop在底层是如何做的。

#开发环境:

      系统:windows7.64位;jdk版本:1.7; eclipse版本:Mars Release (4.5.0); Gradle版本:gradle-2.4.1.2; Spring源码:3.2x。

#下载Spring源码

  1. 第一步肯定是需要把源码下载下来,因为是研究spring的源码,所以我是直接download到我本地;’前往github下载Spring源码(或者通过git

    clone方式下载代码,当然前提是电脑里此时已经安装了github客户端或者类似的工具),可以选择下载mater分支,或者点击Tags选择release版本。(我选的是3.2x版本,因为之前有看过网上说早的版本变动小,最主要是3.2版本编译比较稳)

    2.下载成功后打开压缩包解压到指定目录,spring核心项目都包含在里面,例如spring-core,spring-context,spring-jdbc。源码总共不会超过20M。

      3.此时并不能直接导入eclipse,因为这些项目还没进行编译,需要通过gradle进行编译后才能被eclipse所识别,所以在此之前必须安装好gradle插件,安装gradle教程可以参考网上文章,和配置maven环境一样的步骤;配置成功后通过cmd进入到指定的项目根目录下执行 gradle cleanidea eclipse(比如我想编译spring-core,我的项目位置在E:/spring/spring-core,则需要进入到E:/spring/spring-core下执行 gradle cleanidea eclipse,如果在E:/spring 这个目录下执行的话会把所有的spring模块都进行编译)。

4.编译成功后如下图所示,这时候就可以导入到eclipse。

5.直接import编译好的模块到eclipse,完整导入如下所示:

 #遇到的问题:

提示test不存在,点击项目右键->Build Path->Java Build Path,在弹框中选择Libraries,移除这些红色X的包。

  

  • 导入后虽然没报错但并不代表已经成功了,我们最终的目的是为了能让spring项目跑起来方便我们去研究一些底层的实现。这时候就需要测试一下是否能正常运行;在spring项目内部提供了大量的test方法,其中我找了一个比较感兴趣的IOC测试类,全称叫 FactoryBeanTests.java,这个类在spring-beans项目下的根录。

#FactoryBeanTests-withAutowiring.xml详情

#运行后如下所示

#最后我会把编译好的spring源码上传到oschina(速度有点慢,成功后我会贴上地址在这里)。其他人就可以直接下下来,省去编译的过程。

【原】Spring源码浅析系列-导入源码到Eclipse的更多相关文章

  1. Spring Ioc源码分析系列--Ioc源码入口分析

    Spring Ioc源码分析系列--Ioc源码入口分析 本系列文章代码基于Spring Framework 5.2.x 前言 上一篇文章Spring Ioc源码分析系列--Ioc的基础知识准备介绍了I ...

  2. JAVA常用集合源码解析系列-ArrayList源码解析(基于JDK8)

    文章系作者原创,如有转载请注明出处,如有雷同,那就雷同吧~(who care!) 一.写在前面 这是源码分析计划的第一篇,博主准备把一些常用的集合源码过一遍,比如:ArrayList.HashMap及 ...

  3. Spring 源码从github导入源码到idea2016

    步骤 安装git或者github客户端 java环境JDK安装(必须是1.8) gradle下载安装(选择的最新版3.1) git clone github上spring源码 import导入proj ...

  4. Spring源码分析之——导入spring-framework源代码到Eclipse

    本人最近想要研究spring的源代码,但当要导入spring sub project到Eclipse里面去的时候遇到了不少麻烦(其实都怪自己想当然). 找到spring-framework的gitHu ...

  5. Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析

    Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...

  6. Spring Ioc源码分析系列--Bean实例化过程(一)

    Spring Ioc源码分析系列--Bean实例化过程(一) 前言 上一篇文章Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理已经完成了对 ...

  7. 【java集合框架源码剖析系列】java源码剖析之TreeMap

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...

  8. 【java集合框架源码剖析系列】java源码剖析之ArrayList

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 本博客将从源码角度带领大家学习关于ArrayList的知识. 一ArrayList类的定义: public class Arr ...

  9. 【java集合框架源码剖析系列】java源码剖析之HashSet

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于HashSet的知识. 一HashSet的定义: public class HashSet&l ...

随机推荐

  1. BZOJ 2738: 矩阵乘法 [整体二分]

    给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 愚蠢的名字...... 整体二分,影响因子就是矩阵里的数 把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行 ...

  2. c语言环境初始化&c语言和汇编混合编程

    bootloader通常会分为两个阶段:第一阶段采用汇编语言来编写,主要是一些核心的初始化工作(内存,时钟的初始化),第二阶段使用C语言来编写,主要是它会完成一些板载硬件的初始化(串口,网口)然后其启 ...

  3. mongodb window安装配置

    下载mongodb安装包 1. https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl?_ga=2.233271640.711265466.15193 ...

  4. 定制化WinPE

    1 .首先挂载wim Dism /Mount-WIM /WimFile:D:\install.wim /Index: /MountDir:D:\wimmount 2. 如何要修改WinPE的启动项,可 ...

  5. centos7 网桥的配置

    centos7下配置网桥,两个步骤:1.新建网桥配置2.修改网卡配置 新建br0 网桥配置 在/etc/sysconfig/network-scripts/目录下新建ifcfg-br0,添加如下配置信 ...

  6. Mybatis查询,resultMap="Map" 查询数据有空值,导致整个map为空的问题

    解决方法,不要使用Map接收,使用HashMap或者LinkHashMap,都可以. resultMap="Map" 替换为: resultMap="HashMap&qu ...

  7. CUP、内存、磁盘是如何在一起工作的

    IT技术发展到今天,计算机能做的事情可谓复杂的多.那么计算机是如何做出如此复杂的运算的呢? 不准确的说,计算机主要做两件事,数据计算和数据存储. 第一先说说计算机是如何计算的吧. 我们平时见到的所有计 ...

  8. 【学习笔记】Spring中的BeanFactory和ApplicationContext 以及 Bean的生命周期(Y2-3-2)

    BeanFactory和ApplicationContext Spring的IoC容器就是一个实现了BeanFactory接口的可实例化类. Spring提供了两种不同的容器: 一种是最基本的Bean ...

  9. C/C++语言简介之运算符

    比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移.例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 0 ...

  10. vue.js 安装过程(转载)

      一.简介 Vue.js 是什么 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核 ...