用了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源码
- 第一步肯定是需要把源码下载下来,因为是研究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的更多相关文章
-
JAVA常用集合源码解析系列-ArrayList源码解析(基于JDK8)
文章系作者原创,如有转载请注明出处,如有雷同,那就雷同吧~(who care!) 一.写在前面 这是源码分析计划的第一篇,博主准备把一些常用的集合源码过一遍,比如:ArrayList.HashMap及 ...
-
Spring 源码从github导入源码到idea2016
步骤 安装git或者github客户端 java环境JDK安装(必须是1.8) gradle下载安装(选择的最新版3.1) git clone github上spring源码 import导入proj ...
-
Spring源码分析之——导入spring-framework源代码到Eclipse
本人最近想要研究spring的源代码,但当要导入spring sub project到Eclipse里面去的时候遇到了不少麻烦(其实都怪自己想当然). 找到spring-framework的gitHu ...
-
【java集合框架源码剖析系列】java源码剖析之TreeMap
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...
-
【java集合框架源码剖析系列】java源码剖析之ArrayList
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 本博客将从源码角度带领大家学习关于ArrayList的知识. 一ArrayList类的定义: public class Arr ...
-
【java集合框架源码剖析系列】java源码剖析之HashSet
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于HashSet的知识. 一HashSet的定义: public class HashSet&l ...
-
【java集合框架源码剖析系列】java源码剖析之LinkedList
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 在实际项目中LinkedList也是使用频率非常高的一种集合,本博客将从源码角度带领大家学习关于LinkedList的知识. ...
-
Jetty源码学习-编译Jetty源码二三事
工作小几个月了,JDK基础和web应用框架学的的差不多了,开始学习Jetty源码,费了小半天才编译成功,把自己拆过的坑记录下来. 编译前的环境: MAVEN 3.3.Eclips eLuna Serv ...
-
spring源码浅析——IOC
=========================================== 原文链接: spring源码浅析--IOC 转载请注明出处! ======================= ...
随机推荐
-
Windows Azure 服务总线和物联网
机器到机器 (M2M) 计算正迅速成为一种技术,所有开发人员和架构师需要拥抱. 许多研究表明一个未来世界的数百亿美元的设备 (在地球上的每一个人的出现).MSDN杂志有2篇文章讨论Azure服务总线和 ...
-
uva 12549
12549 - Sentry Robots Time limit: 1.000 seconds We need to guard a set of points of interest using s ...
-
bzoj 3611: [Heoi2014]大工程
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...
-
海贼王之&mdash;&mdash;梦想音乐
相信和很多海粉一样,对伙伴的关照和战斗,是相当地震撼. 好东西时不时地听一下,然后感受那种刷新全身表层细胞,触电...: 音乐链接: http://v.youku.com/v_show/i ...
-
AIR加载PDF
//系统需要先安装上Adobe Reader import flash.html.HTMLLoader; import flash.html.HTMLPDFCapability; import fla ...
-
Docker学习计划
刚开始学习Docker的时候,找资料在网上看到最多的是Docker的好处.比如: 1.Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多 2.Docker 对系统资源的利用率很高, ...
-
Ocelot中文文档-管理
Ocelot支持在运行时通过一个认证的Http API修改配置.有两种方式对其验证, 使用Ocelot的内置IdentityServer(仅用于向管理API验证请求)或将管理API验证挂接到您自己的I ...
-
[LeetCode] 120. Triangle _Medium tag: Dynamic Programming
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
-
视频压缩和H264
一.视频压缩 1.1 为什么需要压缩视频? 假设一个2小时未压缩的高清视频,1920×1080p的电影,我们来计算一下他的存储容量.先介绍一下帧率(frame rate或者是 FPS)概念,也就是每秒 ...
-
Linux基础命令---zip
zip zip是一种最通用的文件压缩方式,使用于unix.msdos.windows.OS等系统.如果在编译zip时包含bzip 2库,zip现在也支持bzip 2压缩.当将大于4GB的文件添加到存档 ...