不看源码,怎么卷的过小年轻

2024-05-24 14:18
文章标签 源码 怎么 不看 年轻

本文主要是介绍不看源码,怎么卷的过小年轻,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。

在工作中,我相信很多人都有下面这样的感受:

  • 这谁的代码呀,看不下去了
  • 这破代码,一行注释也没有
  • 这代码,还没我写的好
  • 这代码,有bug吧
  • 这代码,。。。。。。。

是不是很真实,我们往往在看别人代码的时候就会有上面这些想法。我认为主要的原因还是大部分看的都是业务代码,而且很多是多年积累下来的,也没有重构,然后一年年的堆逻辑,最后就变成shi山了。

当然也有不少的人代码写的确实很好,简洁易懂,我们在看别人代码的时候要抱着学习的态度去看,同样的逻辑,看看别人是怎么写的,为什么这样写,如果是自己会怎么写,对比下,这样的话你就有收获了。

今天想跟大家聊的话题主要是看开源项目的源码,因为业务代码大家每天都能看。所以往往只会去用某些框架,而忽略了它的内在。

多看开源项目的源码是很好的学习机会,特别是当你遇到问题的时候,或者想要做一个什么功能的时候,如果有其他框架中也有类似功能,那么你就知道怎么做了。

案例一

比如我在做一个功能,需要集成多种配置中心,如果依赖了Nacos那就用Nacos,如果依赖了Apollo,那就用Apollo。在自动装配的类中就要处理这种没有依赖的情况,最开始想的就是这样处理:

@ConditionalOnClass(value = com.alibaba.nacos.api.config.ConfigService.class)
@ConditionalOnMissingClass(value = { "com.alibaba.cloud.nacos.NacosConfigProperties" })
@Bean
public NacosConfigUpdateListener nacosConfigUpdateListener() {return new NacosConfigUpdateListener();
}

然后测试发现,如果在项目没有依赖Nacos的情况下,这里就会报错,虽然加了判断也不行。这个时候我就再想,其他的一些框架中是如何实现的呢?

这个时候我就想到之前看Zuul的源码,里面也有类似的需求。会使用不同的Client来进行调用,比如ApacheHttpClient, OkHttpClient。

发现Zuul里面是加了静态类进行判断的,这就不会报错了。如下:

@Configuration
@ConditionalOnClass(value = com.alibaba.nacos.api.config.ConfigService.class)
@ConditionalOnMissingClass(value = { "com.alibaba.cloud.nacos.NacosConfigProperties" })
protected static class NacosConfiguration {@Beanpublic NacosConfigUpdateListener nacosConfigUpdateListener() {return new NacosConfigUpdateListener();}
}

案例二

当我需要控制Feign的调用逻辑,替换调用的URL时我就想到之前看过Sleuth的源码,Sleuth做为一款链路跟踪框架,内部对很多框架进行了集成。

像Feign这种远程调用的,需要对它进行扩展,然后透传链路跟踪的数据。所以当我也有类似需求的时候,就可以参考Sleuth的实现。

在这里插入图片描述

上面贴了Sleuth中的TracingFeignClient源码,TracingFeignClient就是Sleuth中对Feign Client的扩展,增加了Sleuth自己的一些逻辑。然后这个TracingFeignClient最终会在启动的时候替换掉Feign默认的Client。

案例三

当我需要对Redis做埋点监控的时候,又想起了之前看过opentracing中对Redis的监控代码,就可以借鉴里面的方式。

地址:

https://github.com/opentracing-contrib/java-spring-cloud/

里面就是用了AOP对RedisConnectionFactory和RedisConnection进行了替换,也不用动框架底层的代码,扩展就行。

总结

写本文的目的就是为了告诉大家,在平时无事的时候除了学习一些框架的使用,也要去翻翻源码。虽然当时不一定用的到,但是在你以后遇到类似问题的时候,你会有映象说,当时我在某某框架中看到过类似的解决方案,这就是你的知识积累。

另一个点就是这些框架中都会用到一些好的设计,也是我们可以学习参考的案例。

最后就是在面试中也有遇到说:有没有看过框架的源码啊之类的问题?

如果真的看过,并且记住了,这个时候你就可以和面试官侃侃而谈,称兄道弟了。

关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud微服务-全栈技术与案例解析》, 《Spring Cloud微服务 入门 实战与进阶》作者, 公众号猿天地发起人。

这篇关于不看源码,怎么卷的过小年轻的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/998639

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。