攤牌了!我要手寫一個“Spring Boot”
本文轉(zhuǎn)載自微信公眾號「JavaGuide」,作者Guide哥。轉(zhuǎn)載本文請聯(lián)系JavaGuide公眾號。
01 重構(gòu) JavaGuide
我們經(jīng)常會對自己早期寫的代碼感覺惡心,這是導(dǎo)致很多項目爛尾的很重要的一個原因之一。
寫作也是一樣,我也經(jīng)常覺得自己早期寫的文章像一坨翔。造成這個現(xiàn)象的原因很簡單!我覺得主要可能有兩方面原因:
- 自己沉淀的知識更多,對于某個知識點的理解更加深刻。
- 不同于其他類型文章,技術(shù)類文章本身就需要不斷完善,文章內(nèi)容才會更好。
所以,最近幾個月我一直抽空對 JavaGuide 上早期的一些文章進(jìn)行大篇幅重構(gòu),比如 Java 基礎(chǔ)、Java 集合框架、 Zookeeper 、Redis 等等。
畢竟,時間有限,自己也還是把主要精力放在寫代碼上。所以,部分文章還沒有開始重構(gòu),比如數(shù)據(jù)結(jié)構(gòu)部分的內(nèi)容。
就非常期待小伙伴們一起貢獻(xiàn)出自己的力量啊!讓 Guide哥 能多點時間寫代碼,嘿嘿!
02 寫了個簡單的 RPC 框架
我在大學(xué)的時候,就使用過 Dubbo 這類 RPC 框架,對于 RPC 框架的原理也有一點的認(rèn)識。
于是乎!疫情那會,工作也不是很忙,我就想著說自己要不要也寫一個 RPC 框架玩玩。
說做就做!前前后后花了 3 個月,我利用業(yè)余時間手寫一個簡單的 RPC 框架(玩具),名字叫做 guide-rpc-framework。這個框架是基于 Netty+Kyro+Zookeeper 并且整合了 Spring 來做的。
講真!確實,花費(fèi)了不少精力。雖然,這玩意的原理不難,但是,想寫好確實要花時間。
目前的話,這個項目已經(jīng)有 0.7k 的 star。感謝小伙伴們的支持!
像這樣的開源項目,放到簡歷上絕對是加分項!
而且,我在自己去寫 RPC 框架的時候,加深了自己對于 RPC 框架原理的認(rèn)識。具體落實到代碼實現(xiàn)的過程中,遇到了很多問題,解決問題的過程中也提高了自己的編程能力和解決問題的能力??偠灾?,造輪子是一種特別能夠提高自己系統(tǒng)編程能力的手段。
03 寫一個簡易版的“Spring Boot”是的!我準(zhǔn)備開始造下一個輪子了,一個簡易版的“Spring Boot”。名字我都起好了,叫做“jsoncat”。
名字沒有特別含義,只是因為這個框架目前定位是只返回 json 類型數(shù)據(jù)給前端,所以就在名字中加上了 json。
其實,說是簡易版的 Spring Boot ,不過是簡單模仿 Spring Boot 提供的功能,自己手寫一個類似的輕量級 HTTP 框架而已。(功能、生態(tài)、穩(wěn)定性等方面肯定不能和 Spring Boot 對比啦!)
具體實現(xiàn)的話,先簡單聊聊,后面會單獨(dú)寫文章來分享。我會使用 Netty 來寫一個簡易的 HTTP Server,主要用來處理 HTTP 請求。其他模塊的話,我會在兼顧代碼可讀性的情況下,盡量減少第三方依賴。所以,整個框架會比較輕量。
另外,代碼也會盡量寫直白點,不故意秀技。我也會將自己寫這個簡易的 HTTP 框架學(xué)到的東西分享出來。當(dāng)然啦!大家想要看源碼的話,我也會將其開源。
寫這個東西只是自己個人的興趣愛好使然,主要也是為了提高自己的編碼能力。推薦小伙伴們也要盡量能夠?qū)⒆约旱南敕ǜ吨T于行動。
理論固然重要,但是脫離于實踐的理論并不可靠。
相比于 CRUD ,自己造個輪子,肯定是更有意思,也更能鍛煉自己的編程能力和解決問題的能力。
目前的想法是,第 1 版至少是能夠讓其正確處理 Get 請求 和 Post 請求。目前的話,我基本已經(jīng)寫完了。相比于之前實現(xiàn)的 RPC 框架來說,這個總體來看,還是稍微簡單一些。

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