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

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

相关文章

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

电脑开机提示krpt.dll丢失怎么解决? krpt.dll文件缺失的多种解决办法

《电脑开机提示krpt.dll丢失怎么解决?krpt.dll文件缺失的多种解决办法》krpt.dll是Windows操作系统中的一个动态链接库文件,它对于系统的正常运行起着重要的作用,本文将详细介绍... 在使用 Windows 操作系统的过程中,用户有时会遇到各种错误提示,其中“找不到 krpt.dll”

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对