上篇文章《跟大家聊聊我们为什么要学习源码?学习源码对我们有用吗?》也说过优秀框架之间的思想都是互相借鉴的,这就是我们要学习源码的缘故起因之一。
举个栗子,比如Dubbo的模块分包核心的主要有以下八个,如下图,我们要知道最基础的的模块应该是dubbo-common公共逻辑模块,这个模块作为最基础的模块,主要是提供了通用模型和工具类;然后dubbo-remoting是远程通讯模块,依赖于dubbo-common模块,相当于Dubbo协议的实现;而dubbo-rpc则是远程调用模块,依赖于dubbo-remoting模块,抽象各种协议,以及动态代理;dubbo-cluster是集群模块,依赖于dubbo-rpc模块,将多个服务提供方伪装为一个提供方,包括:负载均衡, 容错,路由等。
举个栗子,这里还是拿Dubbo的负载均衡来说吧,如下图,LoadBalance是各种负载均衡策略的超级接口,定义了 select 方法用来实现选择哪台机器;然后AbstractLoadBalance是一个抽象类,实现了LoadBalance接口,在覆盖了 select 方法后,其又增长了 calculateWarmupWeight 和 getWeight 权重相关的两个方法,由于这些方法都跟具体的负载均衡策略类有关,故在父类实现了。值得注意的是AbstractLoadBalance抽象类的 select 方法中里留了个给子类覆盖的 doSelect 方法,具体的负载均衡策略将在doSelect中实现。
举个Spring变乱监听的栗子。比如我们现在要知道哪个监听器监听了ContextRefreshedEvent变乱,此时我们可以通过idea全局搜索"(ContextRefreshedEvent"关键字,得到以下截图:从下图可以看到spring-webmvc模块的FrameworkServlet,spring-context模块的ScheduledAnnotationBeanPostProcessor,和spring-jms模块的JmsListenerEndpointRegistry等类订阅了ContextRefreshedEvent变乱,那么在容器刷新的时候这几个类将会监听到ContextRefreshedEvent变乱,执行一些初始化逻辑。
欢迎小伙伴们在评论区补充源码阅读技巧哦,让笔者GET多点技能,嘿嘿。若觉得不错,帮忙点个赞呗。
来自掘金,原文:https://juejin.im/entry/5e4d09a8f265da573e671f89
欢迎光临 创意电子 (https://wxcydz.cc/) | Powered by Discuz! X3.4 |