摊牌了!我要手写一个“Spring Boot”
目前的话,已经把 Spring MVC 相关常用的注解比如
@GetMapping
、@PostMapping
、@PathVariable
写完了。我也已经将项目开源出来了,地址:https://github.com/Snailclimb/jsoncat 。原创开源不易,觉得不错的话,欢迎给良心作者 1 个 star 鼓励一下!
今天是晴天,我像往常一样坐在窗台,看着电脑“发呆”。毕竟是周末,就不分享技术干货了。
简单和小伙伴们聊聊自己最近正在做,已经开始做的事情。
01 重构 JavaGuide
我们经常会对自己早期写的代码感觉恶心,这是导致很多项目烂尾、不好维护很重要的一个原因之一。
写作也是一样,我也经常觉得自己早期写的文章像一坨翔。造成这个现象的原因很简单!我觉得主要可能有两方面原因:
- 自己沉淀的知识更多,对于某个知识点的理解更加深刻。
- 不同于其他类型文章,技术类文章本身就需要不断完善,文章内容才会更好。
所以,最近几个月我一直抽空对 JavaGuide 上早期的一些文章进行大篇幅重构,比如 Java基础、Java集合框架、 Zookeeper 、Redis等等。
毕竟,时间有限,自己也还是把主要精力放在写代码上。所以,部分文章还没有开始重构,比如数据结构部分的内容。
就非常期待小伙伴们一起贡献出自己的力量啊!让 Guide哥 能多点时间写代码,嘿嘿!
02 写了个简单的 RPC框架
我在大学的时候,就使用过 Dubbo 这类 RPC 框架,对于 RPC 框架的原理也有一点的认识。
于是乎!疫情那会工作也不是很忙,我就想着说自己要不要也写一个 RPC 框架玩玩。
说做就做!前前后后花了 3 个月,我利用业余时间手写一个简单的 RPC 框架(玩具),名字叫做 guide-rpc-framework。这个框架是基于 Netty+Kyro+Zookeeper 并且整合了 Spring 来做的。
讲真!确实,花费了不少精力。虽然,这玩意的原理不难,但是,想写好确实要花时间。
目前的话,这个项目已经有 0.7k 的 star。感谢小伙伴们的支持!
像这样的开源项目,放到简历上绝对是加分项!
而且,我在自己去写 RPC 框架的时候,加深了自己对于 RPC 框架原理的认识。具体落实到代码实现的过程中,遇到了很多问题,解决问题的过程中也提高了自己的编程能力和解决问题的能力。总而言之,造轮子是一种特别能够提高自己系统编程能力的手段。
03 写一个简易版的“Spring Boot”
是的!我准备开始造下一个轮子了,一个简易版的“Spring Boot”!名字我都起好了,叫做“jsoncat”。
名字没有特别含义,只是因为这个框架目前定位是只返回 json 类型数据给前端,所以就在名字中加上了 json。
其实,说是简易版的 Spring Boot ,不过是简单模仿 Spring Boot 提供的功能,自己手写一个类似的轻量级 HTTP 框架而已。(功能、生态、稳定性等方面肯定不能和 Spring Boot 对比啦!)
具体实现的话,先简单聊聊,后面会单独写文章来分享。 我会使用 Netty 来写一个简易的 HTTP Server,主要用来处理 HTTP 请求。其他模块的话,我会在兼顾代码可读性的情况下,尽量减少第三方依赖。所以,整个框架会比较轻量。
另外,代码也会尽量写直白点,不故意秀技。我也会将自己写这个简易的HTTP框架学到的东西分享出来。当然啦!大家想要看源码的话,我也会将其开源。
写这个东西只是自己个人的兴趣爱好使然,主要也是为了提高自己的编码能力。推荐小伙伴们也要尽量能够将自己的想法付诸于行动。
理论固然重要,但是脱离于实践的理论,并不可靠。
相比于 CRUD ,自己造个轮子,肯定是更有意思,也更能锻炼自己的编程能力和解决问题的能力。
目前的想法是,第1版至少是能够让其正确处理 Get 请求 和 Post 请求。目前的话,我基本已经写完了。相比于之前实现的 RPC 框架来说,这个总体来看,还是稍微简单一些。
不过,大部分时间还是在思考怎么让代码更健壮、更易读、更容易维护!
说句题外话,要想让代码更易读,除了要了解面向对象编程的思想之外,那必然少不了对设计模式的运用。
04 闲聊
当你们看到这篇文章的时候,我已经出门和大学最好的朋友一起出去嗨皮了。
半年多没见,不知道朋友现在长胖了不?反正,我是长胖了。
05 我的开源项目
- JavaGuide :「Java学习+面试指南」一份涵盖大部分Java程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!
- guide-rpc-framework :A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程)
- jsoncat :仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架
- programmer-advancement :程序员应该有的一些好习惯+面试必知事项!
- springboot-guide :Not only Spring Boot but also important knowledge of Spring(不只是SpringBoot还有Spring重要知识点)
- awesome-java :Collection of awesome Java project on Github(Github 上非常棒的 Java 开源项目集合).
我是 Guide 哥,一 Java 后端开发,会一点前端,自由的少年。我们下期再见!微信搜“JavaGuide”回复“面试突击”领取我整理的 4 本原创PDF
摊牌了!我要手写一个“Spring Boot”的更多相关文章
- 写一个Spring Boot的Hello World
尽管这个demo也就hello world水平,但我还是要记录一下(总算能动了QAQ),毕竟老是看文章不动手不行啊 上次写Servlet的CRUD项目还是2月份,虽然代码忘的差不多了,但我就记得JDB ...
- 自己写一个spring boot starter
https://blog.csdn.net/liuchuanhong1/article/details/55057135
- 手把手教你手写一个最简单的 Spring Boot Starter
欢迎关注微信公众号:「Java之言」技术文章持续更新,请持续关注...... 第一时间学习最新技术文章 领取最新技术学习资料视频 最新互联网资讯和面试经验 何为 Starter ? 想必大家都使用过 ...
- 【spring】-- 手写一个最简单的IOC框架
1.什么是springIOC IOC就是把每一个bean(实体类)与bean(实体了)之间的关系交给第三方容器进行管理. 如果我们手写一个最最简单的IOC,最终效果是怎样呢? xml配置: <b ...
- 带你手写基于 Spring 的可插拔式 RPC 框架(一)介绍
概述 首先这篇文章是要带大家来实现一个框架,听到框架大家可能会觉得非常高大上,其实这和我们平时写业务员代码没什么区别,但是框架是要给别人使用的,所以我们要换位思考,怎么才能让别人用着舒服,怎么样才能让 ...
- 利用SpringBoot+Logback手写一个简单的链路追踪
目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...
- 看年薪50W的架构师如何手写一个SpringMVC框架
前言 做 Java Web 开发的你,一定听说过SpringMVC的大名,作为现在运用最广泛的Java框架,它到目前为止依然保持着强大的活力和广泛的用户群. 本文介绍如何用eclipse一步一步搭建S ...
- 浅析MyBatis(二):手写一个自己的MyBatis简单框架
在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...
- 手写一个线程池,带你学习ThreadPoolExecutor线程池实现原理
摘要:从手写线程池开始,逐步的分析这些代码在Java的线程池中是如何实现的. 本文分享自华为云社区<手写线程池,对照学习ThreadPoolExecutor线程池实现原理!>,作者:小傅哥 ...
随机推荐
- 修改Markdown神器[Typora]的主题样式
修改Markdown神器[Typora]的主题样式 Typora是一款专注写作的工具,基于markdown标记语言来完成写作.出于以下原因决定替换主题样式: 1.自带的样式比较low,想替换一款高大上 ...
- 使用 Python破解大众点评字体加密(SVG反扒)
前言 大众点评拥有大量高质量评论信息.种草信息,同时也有非常严格的反扒机制. 今天我们一起使用 Python破解大众点评字体加密,获取极具商业价值的信息. 本文知识点: requests 的使用 xp ...
- MySQL锁这块石头似乎没有我想的那么重
前言 前言为本人写这篇文章的牢骚,建议跳过不看. 之前好几次都想好好的学习MySQL中的锁,但是找了几篇文章,看了一些锁的类型有那么多种,一时间也没看懂是什么意思,于是跟自己说先放松下自己,便从书 ...
- 【原】通过Jenkin传值进Android代码
1) Jenkin中用-Pxxxx = yyyy来传值进gradle 2) 在AndroidManifest.xml中定义占位符: <meta-data android:name="X ...
- 面试【JAVA基础】其他
1.自定义注解 @target 说明了Annotation所修饰的对象范围: constructor.method.field.package.type等等. @retention 定义了该Annot ...
- 非IT行业大企程序员讲述MIS系统开发案例
雪莉叹了一口气,调整了一下被汗水濡湿的刘海,然后向后靠在办公椅中,伸手在电脑键盘上输入了一些内容, 最后拿起印刷着房地产广告的扇子,边扇风边等待着. 她的工位在办公室的东侧角落,侧靠着窗.此时 ...
- Java8 Strean api
Stream 遍历数据集的高级迭代器.使用StreamApi让代码: 声明式:更简洁,更易读: 可复合:更灵活: 可并行:性能更好: 使用流 流的使用一般包括三件事: 一个数据源(如集合)来执行一个查 ...
- 索引对单表查询的影响(Cost和consistent gets)
前提:使用system账户登录sql plus. 建表: SQL> create table t2 as select * from dba_objects; 表已创建. 已用时间: 00: 0 ...
- J2EE之JavaScript(1)
声明:此博客仅供记录自己的学习记录和随笔,看看就行了,就图一乐! 本篇学习随笔来自JavaScript 菜鸟教程:https://www.runoob.com/js/js-howto.html J ...
- 吴恩达《深度学习》-第二门课 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)-第一周:深度学习的实践层面 (Practical aspects of Deep Learning) -课程笔记
第一周:深度学习的实践层面 (Practical aspects of Deep Learning) 1.1 训练,验证,测试集(Train / Dev / Test sets) 创建新应用的过程中, ...