Skip to content

Commit d27117e

Browse files
committed
fig bug.
1 parent 9da0e31 commit d27117e

2 files changed

+3
-3
lines changed

Spring/2 Spring是如何实现事件监听机制的? Spring源码(二).md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
本篇开始分析Spring的事件机制源码,因为Spring的事件机制实质是观察者(发布订阅)模式的实现,因此要想搞清楚Spring的事件机制,因此得知道观察者模式是什么。
66

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的事件机制源码就简单多了。
88

99
在开始正题前,先聊聊研究源码的感受:研究源码前那么必须先搞清楚类与类之间的关系,比如某个接口有哪些实现类,某个父类有哪些子类,子类与子类之间的关系,这些类之间的关系捋清楚了,那么再下手研究源码就容易很多。总之不能一下子就进入源码的某个细节,这样子就会造成只见冰山一角而看不到全貌的感觉。
1010

分析开源项目源码,我们该如何入手分析?(授人以渔).md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
## 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),那么本篇文章再继续跟小伙伴们聊聊源码这个话题。
33

44
在工作之余开始写SpringBoot源码分析专栏前,跟小伙伴们聊聊“**分析开源项目源码,我们该如何入手分析?**”这个话题,我们就随便扯皮,反正是跟小伙伴们一起学习交流,没必要太正式。
55
>小伙伴们看完本文后,若有自己的源码阅读心得可以在下面进行评论或私聊我进行分享,**让我从小伙伴们身上GET多点源码阅读的一些技巧**,嘿嘿。
@@ -11,7 +11,7 @@
1111
1. **一个能流行起来的成熟的开源项目必定功能齐全,可扩展,而功能齐全可扩展的开源项目必定很复杂,代码量大**。比如Spring5框架的源码行数达到了六七十万行,SpringBoot的源码行数达到了25万行左右,Dubbo和RocketMQ的源码行数达到了10万行。一个成熟的开源项目代码量这么多,可以想象其有多复杂。
1212
2. **阅读源码时,我们有时候无法猜透源码作者当时编码时的想法**。因为在刚开始阅读源码的过程中,我们肯定会遇到很不懂的代码,不知道作者为何这么写,为何在这个位置写代码,这些都是很正常的,因为当初作者为啥这么写,可能是针对一些比较特殊的业务场景,或者为了某方面的性能等等,我们根本无法猜透。打个不太恰当的比喻,阅读源码猜测作者的心思就像当初遇到一个自己喜欢的姑娘,猜测她的心思一样,比如猜测她喜欢什么,她的兴趣爱好是什么。其实刚开始阅读源码也一样,有些地方我们一开始是无法猜透作者的心思的。
1313
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)》也说过优秀框架之间的思想都是互相借鉴的,这就是我们要学习源码的原因之一。
1515
1616
这里好像扯的有点远了,总之这里要说明的是阅读优秀框架是有一定难度的。
1717
4. **有些开源框架注释太少也增加了阅读源码的难度**。说到开源项目注释,如果我们阅读老外写的的框架源码可能还好,一般都会有大量注释,比如Spring框架,可以说几乎每个方法都有注释,这个就给我们阅读源码起了很大的帮助。不过唯一不好的可能就是英文注释,阅读对英语有一定的要求。其实英文注释还好,遇到不懂的,百度翻一下就好了。其实比较头疼的就是一些国内优秀的开源框架,其注释可以说是很少的,这无疑大大增加了阅读的难度,甚至有些框架的文档也不齐全,那就更加GG了。

0 commit comments

Comments
 (0)