
因为不断有同学,或留言,或私信,问我Spring源码阅读问题。我本有心回答,但奈何这是一个非三言两语能说清出的事。所以就决定写一篇小文,来分享下我的浅薄经验。
因为Spring的源代码量非常大。如果像阅读电影一样,一行不拉的读,是不现实的。所以,现实,而且有用的做法,是只阅读核心代码。
至于其它边支代码,如果通读,一则不现实,二则没有必要。
但由于Spring复杂,且设计巧妙。初学者刚起初阅读,必然会面比较茫然,不知从哪里入手。而我的做法,有一下几个关键点:
1.先掌握Spring的基本用法。
在阅读Spring源码之前,首先应把握Spring的基本用法spring 源码,否则就找不到基本的出发点。
此时,你必定不能完全理解Srping的运行模式。但随着使用的熟练,一则积累了经验,二则肯定也会有众多问题。这不要紧,反还是好事。

随着学习的深入。你应有自己反思:如果某个模式(例如IOC),由你来设计,该会如何实现?
2.写几个典型的Spring Demo
因为你的目的是阅读Spring源码。所以即使一开始,就阅读相对高阶的SrpingMVC,需要理解的东西很多,必然会困惑不知所措。
因为起始难度很大,缺乏正反馈。对很,甚至是直接就吓退了。
所以,准备几个好的Demo,这些Demo一定要层层深入,从而成为自己阅读源码的出发点。
在内部培训中,我写过一个教程,名叫《Spring从入门到精通》,该教程总共包括5个Demo,由浅入深的排序如下:
基本Java程序实例(SimpleJavaDemo)基本Spring示例(SimpleSpringDemo)Spring自动织入示例(AutoWiredSpringDemo)Spring自动扫描示例(AutoScanSpringDemo)SpringMVC示例(SpringMVCDemo)

大家可以按照个人的状况,也编写出自己的Demo库。
3.边调试,边阅读
例如对以下这行更普通的Spring代码:
直接用Maven下载源码,然后在Eclipse中Debug进去。此时,就像你平常阅读同事的源码一样。带着问题,带着猜测。阅读的过程,边验证,边调整,总重产生机制的模式。
记着,因为Spring源码复杂,且继承机制深,所以一定要边阅读,边记笔记,边画图。例如以下就是我画过的一个图(从Eclise中截取):

很重要的一点。在阅读Spring源码前,一定要先有自己的看法:如果这个东西(例如经典的getBean()方法)由你应设计,会如何做。然后带着想法,跟(debug)进去。不断验证,不断调整。
4.不需面面俱到,只抓重点。
因为Spring源码巨大。对阅读者来说,也不是都有价值,所以一定要抓住重点。
要时刻牢记阅读的初衷:不是为了阅读而阅读,而是为了深刻理解Spring,从而自由利用,所谓“无缘由不自由”。所以只阅读核心的,对自己有用的(这个因人而异)。下面是我当时阅读时的读书笔记提纲,贴起来供各位参考:
5.Spring阅读的收益
通过阅读Spring源码,至少可有下面收获:

#.精通Java
因为 Spirng框架本身,就是对Java最“精妙”的利用。我敢保证,在阅读Spring的过程,除了看到这些Java的“新”特性外。你也可学会“大神”们,是怎样恰当且高效的编写Java程序。
#.学习设计
Spring框架本身就是一个“设计良好”的典型,其中长期采用到经典的设计理念,例如“观察者模式”、“单例模式”等。因此学习Spring的过程,就是学习设计的过程。
#.深刻理解Spring用法
所谓“无缘由自由”。等你学习了Spring源码后。我敢保证,你回头再来看自己,或他人原来写的Spring程序,肯定会看到很多“错误”。包括代码的冗余,冲突等。
.最后
如果你是一个初学者。刚起初阅读Spring源码,一定会觉得非常困难。因为其中涉及很多新东西。但这正表明,Spring源码是一个宝库。
咬咬牙,扛过去,你的技术层次都会跃上一个新的台阶spring 源码,甚至是质的飞跃,所谓:
“会当凌绝顶,一览众山小。”
最后追你好运,加油!!
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-136949-1.html
反舰导弹就很被动