Spring源码解析——如何阅读源码
2016-03-03 17:00
507 查看
最近没什么实质性的工作,正好有点时间,就想学学别人的代码。也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想。
手码不易,转载请注明:xingoo
这篇博文你可以了解到:
1 Spring jar包以及源码使用
2 简单的spring运行示例
3 利用断点调试程序,如何快速的阅读程序【快捷键等的使用】
这次阅读的源码比较老了,是3.0.5版本的,由于正好手头有这个版本的源码,而且平时基本上也是用的这个版本Spring,因此后文的分析也都是针对这个版本。
下面贡献一下Jar包以及源码,由于百度云上传的压缩包总是解压失败,就放在csdn上面了。
回到顶部
首先,在工程右键,属性中,添加必要的jar包。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/e958a85b14f67ea79fc0cff07cce986c.png)
选中必要的jar包,上面给出的源码jar包中,导入spring3.0.5中的所有jar包。
其中lib内的是spring的jar包,用到哪个导入哪个,不知道的话,全部导入就行了。
外面的几个jar包,用于日志以及mysql的驱动。commons-logging jar包是必须的,其他的随意吧。
不确定的话,lib外面的这几个jar包以及lib里面的都导入就行了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/90b6327beb5c5bb19bf35c9757f46686.png)
导入jar包后,点开jar包,选中source attachment进行编辑,链接到源码的jar包。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/84d77ae2344b36fe62412575cdd2ce90.png)
选择相应的source源码包
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/3a68acda43c340fc003af0093adb6c99.png)
全部导入后,如下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/feb2ad70ea45bdde48e5d4cf5c71bb89.png)
回到顶部
首先是一个必要的POJO类,用于注入属性的值。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
主函数,用于读取资源文件,获取bean,调用info方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
bean.xml用于配置bean的资源文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
运行结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/a49a4c4caea29b81cd549307b5b58224.png)
回到顶部
首先,有了前面的jar包以及源码包,你就可以通过这个简单的程序,进行但不的调试,阅读源码。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/3cfc9df477734c494455c51b958a55d1.png)
简单的说下调试的快捷键:
1 F5:下一步,可以进入下一个函数栈
2 F6:当前函数的下一步,不会进入其他的函数。
3 F8:下一个断点。
4 也可以通过选中一个变量或者表达式,按ctrl+shift+i 来查看内容。或者添加监视的方式,查看。
5 可以通过快捷键F2,来查看一个函数方法的javadoc,即说明
6 快捷键F3或者ctrl+鼠标点击,进入一个函数
7 ctrl+shift+G 查看当前方法都有谁在使用
8 F4查看类的继承关系,可以向上显示出类继承的父类以及接口。
有了调试的方法,接下来,就是如何阅读源码了!
1 参考书籍,推荐《Spring技术内幕》
这本书,基本上很详细的讲述了,spring的实现方式,以及类之间的复杂关系。可以帮助你快速的理清复杂的类之间的关系。
2 使用StarUML画类图
比如你好不容易理清了一个部分的关系,很快就会忘记其中的关系,那么可以通过这个工具,简单的画出其中的复杂关系。
这样,下一次看的时候也会清楚一些,这是我今天刚画好的ClassPathXmlApplicationContext的类图关系:
手码不易,转载请注明:xingoo
这篇博文你可以了解到:
1 Spring jar包以及源码使用
2 简单的spring运行示例
3 利用断点调试程序,如何快速的阅读程序【快捷键等的使用】
这次阅读的源码比较老了,是3.0.5版本的,由于正好手头有这个版本的源码,而且平时基本上也是用的这个版本Spring,因此后文的分析也都是针对这个版本。
下面贡献一下Jar包以及源码,由于百度云上传的压缩包总是解压失败,就放在csdn上面了。
回到顶部
如何使用jar包以及源码的source包
首先,在工程右键,属性中,添加必要的jar包。![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/e958a85b14f67ea79fc0cff07cce986c.png)
选中必要的jar包,上面给出的源码jar包中,导入spring3.0.5中的所有jar包。
其中lib内的是spring的jar包,用到哪个导入哪个,不知道的话,全部导入就行了。
外面的几个jar包,用于日志以及mysql的驱动。commons-logging jar包是必须的,其他的随意吧。
不确定的话,lib外面的这几个jar包以及lib里面的都导入就行了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/90b6327beb5c5bb19bf35c9757f46686.png)
导入jar包后,点开jar包,选中source attachment进行编辑,链接到源码的jar包。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/84d77ae2344b36fe62412575cdd2ce90.png)
选择相应的source源码包
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/3a68acda43c340fc003af0093adb6c99.png)
全部导入后,如下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/feb2ad70ea45bdde48e5d4cf5c71bb89.png)
回到顶部
spring样例
首先是一个必要的POJO类,用于注入属性的值。![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
1 package com.test.bean; 2 3 public class Person { 4 5 private String name; 6 private int age; 7 8 public String getName() { 9 return name; 10 } 11 public void setName(String name) { 12 this.name = name; 13 } 14 public int getAge() { 15 return age; 16 } 17 public void setAge(int age) { 18 this.age = age; 19 } 20 public void info(){ 21 System.out.println("name:"+getName()+" age:"+getAge()); 22 } 23 }
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
主函数,用于读取资源文件,获取bean,调用info方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
1 package testSpring; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 import com.test.bean.Person; 7 8 public class test { 9 public static void main(String[] args){ 10 ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//读取bean.xml中的内容 11 Person p = ctx.getBean("person",Person.class);//创建bean的引用对象 12 p.info(); 13 } 14 }
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
bean.xml用于配置bean的资源文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://www.springframework.org/schema/beans" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 6 <bean id="person" class="com.test.bean.Person"> 7 <property name="name" value="xingoo"/> 8 <property name="age" value="12"/> 9 </bean> 10 </beans>
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/69c5a8ac3fa60e0848d784a6dd461da6.gif)
运行结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/a49a4c4caea29b81cd549307b5b58224.png)
回到顶部
阅读源码
首先,有了前面的jar包以及源码包,你就可以通过这个简单的程序,进行但不的调试,阅读源码。![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/3cfc9df477734c494455c51b958a55d1.png)
简单的说下调试的快捷键:
1 F5:下一步,可以进入下一个函数栈
2 F6:当前函数的下一步,不会进入其他的函数。
3 F8:下一个断点。
4 也可以通过选中一个变量或者表达式,按ctrl+shift+i 来查看内容。或者添加监视的方式,查看。
5 可以通过快捷键F2,来查看一个函数方法的javadoc,即说明
6 快捷键F3或者ctrl+鼠标点击,进入一个函数
7 ctrl+shift+G 查看当前方法都有谁在使用
8 F4查看类的继承关系,可以向上显示出类继承的父类以及接口。
有了调试的方法,接下来,就是如何阅读源码了!
1 参考书籍,推荐《Spring技术内幕》
这本书,基本上很详细的讲述了,spring的实现方式,以及类之间的复杂关系。可以帮助你快速的理清复杂的类之间的关系。
2 使用StarUML画类图
比如你好不容易理清了一个部分的关系,很快就会忘记其中的关系,那么可以通过这个工具,简单的画出其中的复杂关系。
这样,下一次看的时候也会清楚一些,这是我今天刚画好的ClassPathXmlApplicationContext的类图关系:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/3da76da4d43d861e7662e6694f46a032.png)
相关文章推荐
- JAVA基础 two
- Java 内存区域
- RHEL6.6安装My Eclipse 2015
- maven安装以及eclipse配置maven
- SSH(一)---Spring框架概述和SpringMVC原理
- 我的java学习 の 数组作业
- Leetcode:231. Power of Two(JAVA)
- Eclipse上改动Jython代码的Comment颜色
- Leetcode:326. Power of Three(JAVA)
- 自动化测试之路——EMMA在java代码覆盖率自动化测试中的应用(一)
- Java 完美判断中文字符
- java中static{}语句块详解
- java.security.InvalidKeyException: Illegal key size
- JAVA中读写EXCEL
- java泛型
- Jfinal框架学习笔记二
- Spring MVC-----基础注解
- Java读取Excel内容
- Jfinal初始学习笔记一
- Spring@Autowired注解与自动装配