File tree Expand file tree Collapse file tree 2 files changed +3
-3
lines changed Expand file tree Collapse file tree 2 files changed +3
-3
lines changed Original file line number Diff line number Diff line change 4
4
5
5
本篇开始分析Spring的事件机制源码,因为Spring的事件机制实质是观察者(发布订阅)模式的实现,因此要想搞清楚Spring的事件机制,因此得知道观察者模式是什么。
6
6
7
- 同时,[ 本文接模仿Spring事件机制实现自定义事件驱动编程--Spring的事件机制源码分析(一)] ( https://juejin.im/post/5e4252f66fb9a07c8e6a2421 ) 一文,前面自己实现了一个简单的事件驱动编程的简单demo后,那么此时分析Spring的事件机制源码就简单多了。
7
+ 同时,[ 本文接模仿Spring事件机制实现自定义事件驱动编程--Spring的事件机制源码分析(一)] ( https://github.com/yuanmabiji/Java-SourceCode-Blogs/blob/master/Spring/1%20%E6%A8%A1%E4%BB%BFSpring%E4%BA%8B%E4%BB%B6%E6%9C%BA%E5%88%B6%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6%E9%A9%B1%E5%8A%A8%E7%BC%96%E7%A8%8B%20Spring%E6%BA%90%E7%A0%81%EF%BC%88%E4%B8%80%EF%BC%89.md ) 一文,前面自己实现了一个简单的事件驱动编程的简单demo后,那么此时分析Spring的事件机制源码就简单多了。
8
8
9
9
在开始正题前,先聊聊研究源码的感受:研究源码前那么必须先搞清楚类与类之间的关系,比如某个接口有哪些实现类,某个父类有哪些子类,子类与子类之间的关系,这些类之间的关系捋清楚了,那么再下手研究源码就容易很多。总之不能一下子就进入源码的某个细节,这样子就会造成只见冰山一角而看不到全貌的感觉。
10
10
Original file line number Diff line number Diff line change 1
1
## 1 前言
2
- 本文接上篇文章[ 跟大家聊聊我们为什么要学习源码?学习源码对我们有用吗?] ( https://juejin.im/post/5e4b56a8f265da575d20d6e8 ) ,那么本篇文章再继续跟小伙伴们聊聊源码这个话题。
2
+ 本文接上篇文章[ 跟大家聊聊我们为什么要学习源码?学习源码对我们有用吗?] ( https://github.com/yuanmabiji/Java-SourceCode-Blogs/blob/master/%E8%B7%9F%E5%A4%A7%E5%AE%B6%E8%81%8A%E8%81%8A%E6%88%91%E4%BB%AC%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%AD%A6%E4%B9%A0%E6%BA%90%E7%A0%81%EF%BC%9F%E5%AD%A6%E4%B9%A0%E6%BA%90%E7%A0%81%E5%AF%B9%E6%88%91%E4%BB%AC%E6%9C%89%E7%94%A8%E5%90%97%EF%BC%9F.md ) ,那么本篇文章再继续跟小伙伴们聊聊源码这个话题。
3
3
4
4
在工作之余开始写SpringBoot源码分析专栏前,跟小伙伴们聊聊“** 分析开源项目源码,我们该如何入手分析?** ”这个话题,我们就随便扯皮,反正是跟小伙伴们一起学习交流,没必要太正式。
5
5
> 小伙伴们看完本文后,若有自己的源码阅读心得可以在下面进行评论或私聊我进行分享,** 让我从小伙伴们身上GET多点源码阅读的一些技巧** ,嘿嘿。
11
11
1 . ** 一个能流行起来的成熟的开源项目必定功能齐全,可扩展,而功能齐全可扩展的开源项目必定很复杂,代码量大** 。比如Spring5框架的源码行数达到了六七十万行,SpringBoot的源码行数达到了25万行左右,Dubbo和RocketMQ的源码行数达到了10万行。一个成熟的开源项目代码量这么多,可以想象其有多复杂。
12
12
2 . ** 阅读源码时,我们有时候无法猜透源码作者当时编码时的想法** 。因为在刚开始阅读源码的过程中,我们肯定会遇到很不懂的代码,不知道作者为何这么写,为何在这个位置写代码,这些都是很正常的,因为当初作者为啥这么写,可能是针对一些比较特殊的业务场景,或者为了某方面的性能等等,我们根本无法猜透。打个不太恰当的比喻,阅读源码猜测作者的心思就像当初遇到一个自己喜欢的姑娘,猜测她的心思一样,比如猜测她喜欢什么,她的兴趣爱好是什么。其实刚开始阅读源码也一样,有些地方我们一开始是无法猜透作者的心思的。
13
13
3 . ** 有些开源框架可能集操作系统知识,数据结构,算法和设计模式于一身** 。是的,优秀的框架必定是集成了很多设计模式于一身,目前为止笔者还没见过哪种流行的又没有应用设计模式的框架哈。比如很多框架运用了单例模式,工厂模式,责任链模式,装饰器模式和模板方法模式等,因为使用设计模式能让框架易于扩展。同时,不乏一些框架应用了一些操作系统层面的知识,这一块比较底层,相信很多学java的小伙伴没接触过。此外,开源框架某些地方会用到数据结构和算法,举个栗子,比如Dubbo默认有四种负载均衡策略,而每种策略又对应一种算法,其中又数RoundRobinLoadBalance负载均衡策略最复杂,一开始实现RoundRobinLoadBalance负载均衡的方式并不太完美或者说有bug,Dubbo也是重写过RoundRobinLoadBalance几次,** 最终借鉴了Nginx的RoundRobinLoadBalance负载均衡算法** 。
14
- > 上篇文章《[ 跟大家聊聊我们为什么要学习源码?学习源码对我们有用吗?] ( https://juejin.im/post/5e4b56a8f265da575d20d6e8 ) 》也说过优秀框架之间的思想都是互相借鉴的,这就是我们要学习源码的原因之一。
14
+ > 上篇文章《[ 跟大家聊聊我们为什么要学习源码?学习源码对我们有用吗?] ( https://github.com/yuanmabiji/Java-SourceCode-Blogs/blob/master/%E8%B7%9F%E5%A4%A7%E5%AE%B6%E8%81%8A%E8%81%8A%E6%88%91%E4%BB%AC%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%AD%A6%E4%B9%A0%E6%BA%90%E7%A0%81%EF%BC%9F%E5%AD%A6%E4%B9%A0%E6%BA%90%E7%A0%81%E5%AF%B9%E6%88%91%E4%BB%AC%E6%9C%89%E7%94%A8%E5%90%97%EF%BC%9F.md ) 》也说过优秀框架之间的思想都是互相借鉴的,这就是我们要学习源码的原因之一。
15
15
16
16
这里好像扯的有点远了,总之这里要说明的是阅读优秀框架是有一定难度的。
17
17
4 . ** 有些开源框架注释太少也增加了阅读源码的难度** 。说到开源项目注释,如果我们阅读老外写的的框架源码可能还好,一般都会有大量注释,比如Spring框架,可以说几乎每个方法都有注释,这个就给我们阅读源码起了很大的帮助。不过唯一不好的可能就是英文注释,阅读对英语有一定的要求。其实英文注释还好,遇到不懂的,百度翻一下就好了。其实比较头疼的就是一些国内优秀的开源框架,其注释可以说是很少的,这无疑大大增加了阅读的难度,甚至有些框架的文档也不齐全,那就更加GG了。
You can’t perform that action at this time.
0 commit comments