spring-beans包源码阅读-1-源码导读

前言-如何阅读Spring源码

想想大概是去年这个时候clone的spring-frameword工程,到现在整整一年了,起初功力太弱,实在是读不了spring,现在算是功力有所精进,期间断断续续也把Spring的工程打开浏览过几次,但是都只是粗略的走读,一方面刚刚说了,功力不够,另一方面,也是自己心浮气躁,沉不下心来,再加上spring代码层次之复杂,如果不仔细分析琢磨,那就更不可能读懂了。

要说为什么要读Spring呢,其实我给的答案比较简单,就是好奇,想知道它是怎么做的,因为已经工作了,所以没有应付面试官这种需求了。当然如果抱着功利的心态去读也是没有错的,因为读源码这件事本身就可以从中获取大量的知识,包括比较基础的语言知识也好,或者是框架设计层面的也好,而且读这些高难度的源码也能够提升我们的视野,让我们不局限在工作的crud + html中,毕竟如果想成为一名优秀的工程师甚至是架构师,宏观框架的设计能力也是必须有的,而且就目前来说,spring几乎成为了行业标准,市面上很多其他的框架都是基于spring做的扩展,或者至少也做到和spring兼容,比如dubbo等等,更不用说spring cloud这一个超大社区,里面包含了大量的分布式框架,无一不对spring做了兼容。所以想在java道路上走的更远,精通spring是绕不开的一个节点。

Spring优秀吗?当然优秀了,曾经看到一些对spring的质疑,觉得spring有过度设计的嫌疑,这点我本人暂时保留态度,因为我代码还没读完呢,没有发言权。但以一个社区的力量,做到现在成为行业标准(准标准吧)相比也不是等闲之辈,怀着一些谦卑的态度去看待的话,我觉得我还是能学到不少东西的。

前段时间算是仔细阅读了一部分,这里也算是做个记录,记录一下阅读过程中的一些小小心得,对自己也算是一种监督,如果有幸一字半句还能帮助到来访的人,那也算是我的荣幸。

Spring算是大工程,60W行代码(包含测试代码),想要阅读起来绝对不轻松。怎么入手呢?首先好好掌握java基础知识,其中反射和自省机制是重中之重,然后要掌握设计模式以及设计模式的各种理念和原则,这是整个Spring的重要脉络。如果掌握了这些,那么可以开始阅读Spring了。

但是读源码也有技巧,愣看也不行,得有方法。首先需要从spring-beans这个包入手,这个包是spring的核心,如果说spring只能选一个必看的包那就是这个了,这个包中定义了spring的核心逻辑,那就是bean以及factory,里面一切的内容都是围绕着这两个概念进行的。

看源码环境不能少,建议使用IDEA阅读,具体构建步骤不再赘述,github上写得很明白。从哪入手呢?建议先把所有的Interface看一遍,并仔细阅读每个interface上的注释,这样至少会对整体的架构和最抽象的设计有一个模糊的印象,并且在阅读的过程中,自然就能发现哪些接口是核心接口。看完接口之后,就可以看看一些核心接口的具体实现了,既要有细读,也要有宏观的理解,还要有Test的调试。

熟悉Spring的朋友肯定知道,BeanFactory、BeanDefinition、BeanWrapper算的上是这个包乃至整个spring的核心接口。我也打算先这几个接口,以及如何实现开始说起。