[肥朝]一比一手写Dubbo源码中的SPI,内附git地址

前言

以前对dubbo的SPI进行了四篇的分享.你们对这个概念有了一些初步的了解.谈到编程水平如何进阶,你们可能都会异口同声的说出三个字,看源码.可是我却始终认为,编程光,是永远学不会的.可是不少时候,连怎么看源码都无从下手,你叫我写仿写源码,这不是开玩笑?git

咱们能够回忆一下咱们在公司是怎么写代码的.首先产品提出需求,接着开需求评审会,再接着代码设计,最后开始编码.编程

今天咱们就仿造这个流程,本身动手实现dubbo的spi缓存

提出需求

Dubbo和JDK的SPI究竟有何区别? 中,咱们已经分析了dubbo中spi和jdk中spi有什么区别,dubbo相比jdk变化的内容大体以下:框架

(一) 拓展点增长了缓存,提升了性能 (二) 增长了spi的默认值 (三) 增长了经过key的形式获取拓展点 (四) 增长了IocAOP功能性能

这里插句题外话,咱们不能为了看源码而看源码,最重要的是,在看源码的过程当中,学会分析问题的思路.假若有个新的RPC框架,好比肥朝RPC,我问你肥朝RPC中的SPI和JDK的SPI有几点区别呢?我在Dubbo和JDK的SPI究竟有何区别?这篇中,就把我是如何分析出这四点的整个心路历程展现出来,你能够大胆走进个人心里世界.编码

需求评审

既然是需求评审,其实说白了,就是和产品砍需求.产品提出的需求就是上面那四个功能.(一)(二)(三)都是基本又比较核心的功能,这些砍了那这个版本就没意思了,(四)这个能够放在下一个版本去迭代开发.spa

代码设计

只要实现了key-value获取拓展点,那么获取默认拓展点就很容易了,由于这个默认拓展点只是key-value的一种特殊形式,他的默认值,也就是这个key,就在SPI注解上.其实思路总起起来就一句话,由于咱们在拓展点配置文件里面已经配置了实现类的权限定名.首先咱们把这些配置文件所有加载出来,解析出全限定名,缓存起来.而后你要获取具体的拓展点,我就在缓存中把他的权限定名拿出来,反射实例化成一个对象返回回去.也就是1.读取并解析文件内容 2.放入map缓存 3.反射生成对象.这三个知识点,我相信看这篇文章的,没有人不会.设计

按照上面的分析,把代码写出来不难吧.什么,写不出?那往下看3d

编码

项目结构如图:code

运行结果如图

代码已经上传到码云.能够下载跑起来,原本想用时序图,流程图和你们把思路理一下的,可是弄了几个小时,我以为还不如本身看代码清楚.核心代码代码不到300行.有问题能够留言.

地址: gitee.com/HelloToby/t…

小提示

由于以前部分同窗反馈对源码中的思路还不是很清晰.因此此次我就直接把源码中的功能模块抽成一个demo,而后你们先把demo运行起来,接着把demo里面的代码重复写个一两遍.由于demo和源码一比一高仿的(变量名,方法名甚至if换不换行都尽可能一致了).因此这个时候,再去看源码就和看本身写的代码应该同样的.这样思路就清晰不少了.但愿这个方式对你阅读源码有帮助.

写在最后

肥朝 是一个专一于 原理、源码、开发技巧的技术公众号,号内原创专题式源码解析、真实场景源码原理实战(重点)。扫描下面二维码关注肥朝,让本该造火箭的你,再也不拧螺丝!

相关文章
相关标签/搜索