攤牌了!我要手寫一個「Spring Boot」

2020-10-01 08:00:14

目前的話,已經把 Spring MVC 相關常用的註解比如@GetMapping@PostMapping@PathVariable 寫完了。我也已經將專案開源出來了,地址:https://github.com/Snailclimb/jsoncat原創開源不易,覺得不錯的話,歡迎給良心作者 1 個 star 鼓勵一下!

今天是晴天,我像往常一樣坐在窗臺,看著電腦「發呆」。畢竟是週末,就不分享技術乾貨了。

簡單和小夥伴們聊聊自己最近正在做,已經開始做的事情。

01 重構 JavaGuide

我們經常會對自己早期寫的程式碼感覺噁心,這是導致很多專案爛尾、不好維護很重要的一個原因之一。

寫作也是一樣,我也經常覺得自己早期寫的文章像一坨翔。造成這個現象的原因很簡單!我覺得主要可能有兩方面原因:

  1. 自己沉澱的知識更多,對於某個知識點的理解更加深刻。
  2. 不同於其他型別文章,技術類文章本身就需要不斷完善,文章內容才會更好。

所以,最近幾個月我一直抽空對 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 框架來說,這個總體來看,還是稍微簡單一些。

用自己寫的框架處理了一次Post請求

不過,大部分時間還是在思考怎麼讓程式碼更健壯、更易讀、更容易維護!

說句題外話,要想讓程式碼更易讀,除了要了解物件導向程式設計的思想之外,那必然少不了對設計模式的運用。

04 閒聊

當你們看到這篇文章的時候,我已經出門和大學最好的朋友一起出去嗨皮了。

半年多沒見,不知道朋友現在長胖了不?反正,我是長胖了。

05 我的開源專案

  1. JavaGuide :「Java學習+面試指南」一份涵蓋大部分Java程式設計師所需要掌握的核心知識。準備 Java 面試,首選 JavaGuide!
  2. guide-rpc-framework :A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基於 Netty+Kyro+Zookeeper 實現的自定義 RPC 框架-附詳細實現過程和相關教學)
  3. jsoncat :仿 Spring Boot 但不同於 Spring Boot 的一個輕量級的 HTTP 框架
  4. programmer-advancement :程式設計師應該有的一些好習慣+面試必知事項!
  5. springboot-guide :Not only Spring Boot but also important knowledge of Spring(不只是SpringBoot還有Spring重要知識點)
  6. awesome-java :Collection of awesome Java project on Github(Github 上非常棒的 Java 開源專案集合).