如何阅读Spring源码

Posted Java编程指南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何阅读Spring源码相关的知识,希望对你有一定的参考价值。

因为不断有朋友,或留言,或私信,问我Spring源码阅读问题。我本有心回答,但奈何这是一个非三言两语能说清出的事。所以就决定写一篇小文,来分享下我的浅薄经验。

因为Spring的源代码量非常大。如果像阅读小说一样,一行不拉的读,是不现实的。所以,现实,而且有用的做法,是只阅读核心代码。

至于其他边支代码,如果通读,一则不现实,二则没有必要。

但因为Spring复杂,且设计精妙。初学者刚开始阅读,必然会面比较茫然,不知从那里入手。而我的做法,有一下几个关键点:

1.先掌握Spring的基本用法。

在阅读Spring源码之前,首先要掌握Spring的基本用法,否则就找不到基本的出发点。

此时,你肯定不能完全理解Srping的运行机制。但随着使用的熟练,一则积累了经验,二则肯定也会有很多疑问。这不要紧,反而是好事。

随着学习的深入。你要有自己思考:如果某个机制(例如IOC),由你来设计,该会如何实现?

2.写几个典型的Spring Demo

因为你的目的是阅读Spring源码。所以如果一开始,就阅读相对高阶的SrpingMVC,需要理解的东西太多,必然会茫然不知所措。

因为起始难度太大,缺乏正反馈。对很多人,甚至是直接就吓退了。

所以,准备几个好的Demo,这些Demo一定要层层深入,从而作为自己阅读源码的出发点。

在内部培训中,我写过一个教程,名叫《Spring从入门到精通》,该教程总共包含5个Demo,由浅入深的顺序如下:

  1. 基本Java程序示例(SimpleJavaDemo)

  2. 基本Spring示例(SimpleSpringDemo)

  3. Spring自动织入示例(AutoWiredSpringDemo)

  4. Spring自动扫描示例(AutoScanSpringDemo)

  5. SpringMVC示例(SpringMVCDemo)

大家可以根据个人的情况,也编写出自己的Demo库。

3.边调试,边阅读

例如对下面这行最普通的Spring代码:


如何阅读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源码是一个宝库。

咬咬牙,扛过去,你的技术层次就会跃上一个新的台阶,甚至是质的飞跃,所谓:

会当凌绝顶,一览众山小。”

最后追你好运,加油!

推荐阅读 ↓↓↓

3.

以上是关于如何阅读Spring源码的主要内容,如果未能解决你的问题,请参考以下文章

升职加薪进阶技能:阅读spring源码搭建源码环境

如何高效阅读 Spring 源码?你需要这个!

spring源码阅读-- 容器启动之创建bean

如何查看spring源码

Spring源码阅读:使用IDEA搭建Spring5.0.x源码阅读环境

Spring源码阅读四 IOC