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:\Repository\org\springframework\spring-core\4.1.9.RELEASE\spring-c
ore-4.1.9.RELEASE
jar cvf spring-cglib-repack-3.2.5.jar org\springframework\cglib
jar cvf spring-objenesis-repack-2.6.jar org\springframework\objenesis
将生成的jar包,导入到缺失jar包的项目中
参考:《Spring源码深度解析》

Spring 源码学习:day1的更多相关文章
- spring源码学习之路---深入AOP(终)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章和各位一起看了一下sp ...
- spring源码学习之路---IOC初探(二)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章当中我没有提及具体的搭 ...
- Spring源码学习
Spring源码学习--ClassPathXmlApplicationContext(一) spring源码学习--FileSystemXmlApplicationContext(二) spring源 ...
- Spring源码学习-容器BeanFactory(四) BeanDefinition的创建-自定义标签的解析.md
写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spri ...
- Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签
写在前面 上文Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作中Spring对XML解析后创建了对应的Docum ...
- Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作
写在前面 上文 Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件主要讲Spring容器创建时通过XmlBeanDefinitionReader读 ...
- Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件
写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设 ...
- 【目录】Spring 源码学习
[目录]Spring 源码学习 jwfy 关注 2018.01.31 19:57* 字数 896 阅读 152评论 0喜欢 9 用来记录自己学习spring源码的一些心得和体会以及相关功能的实现原理, ...
- Spring 源码学习——Aop
Spring 源码学习--Aop 什么是 AOP 以下是百度百科的解释:AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程通过预编译的方式和运行期动态代理实 ...
- Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory
前言 在前一篇文章:创建 IoC 容器的几种方式中,介绍了四种方式,这里以 AnnotationConfigApplicationContext 为例,跟进代码,看看 IoC 的启动流程. 入口 从 ...
随机推荐
- Codeforces.297C.Splitting the Uniqueness(构造)
题目链接 \(Description\) 给定一个长为n的序列A,求两个长为n的序列B,C,对任意的i满足B[i]+C[i]=A[i],且B,C序列分别至少有\(\lfloor\frac{2*n}{3 ...
- 网络名词拾遗--part2
网络名词拾遗--part2 关于所谓的连接上限 先要明白服务端和客户端的交互逻辑: 服务端创建socket 与提供对外服务的port端口绑定 开始监听 客户端向这个端口提出请求 服务端接收到这个请求后 ...
- 利用java8对设计模式的重构
java8中提供的很多新特性可以用来重构传统设计模式中的写法,下面是一些示例: 一.策略模式 上图是策略模式的类图,假设我们现在要保存订单,OrderService接口定义要做什么,而NoSqlSav ...
- nginx 负载均衡集群解决方案 healthcheck_nginx_upstreams模块测试 (二)
在这里详细讲解healthcheck_nginx_upstreams模块中存在的bug,对于healthcheck_nginx_upstreams模块的安装和使用请阅读上一篇blog进行学习. 测试环 ...
- Win8下枚举任意进程的句柄表。。。(VB6 Code)
添加一个Command1.一个List1,代码: Private Type PROCESS_HANDLE_TABLE_ENTRY_INFO HandleValue As Long HandleCoun ...
- android:各种访问权限Permission
在Android的设计中,资源的访问或者网络连接,要得到这些服务都需要声明其访问权限,否则将无法正常工作.在Android中这样的权限有很多种,这里将各类访问权限一一罗列出来,供大家使用时参考之用. ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
- 如何将 Java 项目转换成 Maven 项目
本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...
- CentOS6.9下安装python notebook
操作系统:CentOS6.9_x64 python版本 : python2.7.13 添加低权限新用户: useradd mike su mike 使用virtualenv安装python2.7环境 ...
- 部分Linux时区改为东八区的方法
直接上命令 CentOS: timedatectl set-timezone Asia/Shanghai timedatectl status date Alphine: apk add tzdata ...