致Spring Boot初學者

1、引言

        Spring Boot是近兩年來火的一塌糊塗,來這裏的每一位同學,之前應該大致上學習了web項目開發方面的知識,正在努力成長過程中。因爲最近有不少人來向我“請教”,他們大都是一些剛入門的新手,對Spring Boot知識體系還不太瞭解,一方面聽別人說Spring Boot配置簡單、開發簡單、部署簡單,另一方面自己着手開始學習時,卻發現頭緒好多、有點迷茫,實在是每天回覆很多人很麻煩,車軲轆話重複多遍自己也覺得有點無聊,所以在這裏統一做個回覆吧。
        回顧自己學習過程和項目開展過程中,也曾踩過無數的坑,曾經糾結了好幾天才解決其中一個小的技術難點,寫這篇文章也是希望能夠幫助像我當年一樣困惑的Spring Boot初學者走出困境、少走一點彎路、少踩一點坑。
        有關如何快速掌握Spring Boot進行web項目的開發,大家可以看看我的視頻內容:https://edu.51cto.com/sd/091c7
        這裏要給大家強調的一點是,不是說Spring Boot本身功能就多麼強大,而是因爲Spring Boot提供了各種組件的啓動器(starters),開發者只要能配置好對應組件參數,Spring Boot 就會自動配置,讓開發者能快速搭建依賴於 Spring 組件的 Java 項目,也就是說其能夠以簡潔、簡單的方式整合各種業內牛x的組件,這纔是它強大的地方。

2、明確Spring Boot階段性學習目標、不積跬步無以至千里

        有時候和朋友、同行交流,會發現,不管系統的行業背景、應用場景、規模大小是怎樣的,還是自己所在單位/公司的技術團隊的人員數量、技術實力如何、大家談論的都是微服務、分佈式、大數據、高併發、消息總線等,有的web項目明明就是一個小型的系統,但還是要強行上各種顯得高大上的技術和框架,彷彿不這樣,就顯得low,最後的結果是系統臃腫繁雜、項目不斷延期、團隊成員叫苦連天。
        須知不同的業務場景對應不同的系統架構,每一個大公司現在的技術架構都不是天生就是這麼強大的,這些技術架構都是由簡單到複雜,每一次的演進都是緊跟業務的需求,爲了解決實際問題,而不是天馬行空。
        大家有興趣可以看看淘寶、京東、滴滴、小米等的系統架構演化歷史,相信在看的過程中,您一定會露出會心一笑的,也能增強不少的信心,大神也是由菜鳥過來的啊。
        我給Spring Boot初學者的建議就是,不急於求成,不好高騖遠,一步一步,穩紮穩打,功到自然成。
        不急於求成,可以避免走彎路,非但不會延緩你成長的速度,反倒會節省你的時間,不好高騖遠,達成一個目標,再製定下一個目標,在連續的成功和進步中,建立起自信心,激發出更強的學習興趣。

3、如果作爲一個後臺程序員,Spring Boot基礎應該要掌握哪些呢?

        後臺程序員主要是關心繫統中數據庫的增刪查改(CRUD),較少關心數據的表現,所以在Spring Boot基礎中,只需掌握以下的各項知識點,應該就可以了。
致Spring Boot初學者
希望大家在學習新東西時,利用帕累托法則,也就是2/8法則,對於其中最重要、最常用的知識點(一般不超過20%)一定掌握,剩餘的知識只需瞭解,有個概念即可,用到時再去現學,這樣可以照顧到我們的精力,不至於搞得精疲力盡。
以上知識點中的重心概述如下:
Java基礎:除了基本的語法外,重點掌握類、接口、集合、這三方面的知識,瞭解反射、泛型就更好了。
Maven:瞭解依賴、依賴傳遞的概念,知道本地倉庫、中央倉庫、第三方倉庫是怎麼回事,掌握如何配置本地倉庫以及指定國內的第三方倉庫(如阿里),知道如何打包。
數據庫基礎:掌握MySQL數據庫(或者其分支Mariadb),能夠建庫、建表、建字段,能夠較爲熟練的撰寫常用的SQL語句就行。
IntelliJ IDEA:清楚如何創建工程、如何進行工程設置、能夠在setting中進行常用的設置等等。
項目初始化創建:知道如何快速創建Spring Boot工程,瞭解在網絡不通暢時,如何利用jar包搭建本地服務進行工程創建。
包目錄、資源目錄:知道一個基礎的Spring Boot工程都應該包含哪些包,同時知道資源目錄中各項資源文件夾的作用

基本配置:知道常用的配置,如何創建開發環境、生產環境配置。
jar包依賴(pom.xml):掌握如何撰寫依賴配置,利用Maven進行jar包的自動管理。
實體層Domain:主要是掌握如何設置實體的不同類型主鍵(如自增列、UUID),對應數據庫不同類型字段的設置,如整型、浮點型、文本型、字符串類型等,如果能夠更進一步瞭解實體之間的映射關係,如一對多、多對一、多對多就更好了。
控制層Controller:主要是弄清楚各項註解的意思及使用方法,明白@Controller和@RestController的區別,清楚如何接收/反饋數據或網頁,掌握RESTful設計風格是怎麼回事。
數據倉庫層Repository:知道四大接口CrudRepository、PagingAndSortingRepository、JpaRepository、JpaSpecificationExecutor及適用場景。
業務層Service:創建業務層,一般都是先創建接,在創建實現類,在實現類中注入響應的數據倉庫層Repository接口。
Thymeleaf模板:Spring Boot工程中已經不建議大家使用JSP,而是採用Thymeleaf模板了,掌握Thymeleaf常用的語法就行,對較少用到的知識點有個概念,不一定掌握,用到時再查。
工程打包:知道如何利用Maven對工程進行打包,可以達成jar包和war包,根據實際情況而定。

4、如果作爲一個全棧工程師,Spring Boot開發web項目又該掌握哪些基礎知識呢?

        一般中大型公司都是分工明確,對全棧工程師不會有什麼需求,但大量的中小型公司,由於研發團隊規模較小,往往一個web工程師同時承擔前、後端開發工作,對全棧工程師的需求很大,另外從個人的職業發展前景看,“一專多能”能夠有效拓展自己的職業道路,技多不壓身,只是一定要切記“一專多能”,在一專的基礎上多能,這樣纔有競爭力。
基於上面的知識圖譜,Spring Boot開發web項目對全棧工程師的基礎要求又是什麼呢,見下圖
致Spring Boot初學者
從上圖可以看出,前端知識除了html、css和javascript外,還提到了Bootstrap和RequireJS。
Bootstrap:簡潔、直觀、強悍的前端開發框架,讓web開發更迅速、簡單,響應式佈局,豐富的控件,也是最近這幾年很火的一個前端框架(有的人說這不算框架,僅僅是css、js組件的開發庫,不管這些,好用就行)。
RequireJS:JavaScript模塊加載器,支持異步加載JS組件(通過擴展,還可以管理CSS文件),最大作用按需異步加載JS組件,另外附帶的一個效果是讓頁面乾淨清爽了。

5、如果已經掌握了以上Spring Boot的基礎知識,想要進一步進階,又該掌握哪些必須的知識點呢?

        假設我們現在已經掌握了Spring Boot的各項基礎知識了,能夠本本分分的利用該後臺框架做一些基礎的開發工作了,但不滿足當前已經掌握的開發技能,如何進一步擴展我們的知識庫呢?
還是基於以上的圖譜(全棧工程師),進行擴展,進行說明如下:
致Spring Boot初學者
從上圖我們可以看到,前端內容增加了一個Vue和圖形圖表,後端增加的東西較多。
前端的Vue不做要求,能掌握是相當好的(這是當前非常火熱的前端框架,比較好上手,同時能夠有效的拓寬您的就業渠道,畢竟要求有Vue經驗的公司是越來越多)。
後端的知識點可不僅僅是上面這些,但列出的這些事必須掌握的,如果這些都掌握,並能熟練運用,那麼恭喜您,在很多公司裏面,您已經能夠躋身中級程序員的隊伍了。
Vue:是一套構建用戶界面的漸進式框架,只關注視圖層, 採用自底向上增量開發的設計,Vue 的目標是通過儘可能簡單的 API 實現響應的數據綁定和組合的視圖組件,有了Vue,你就再不用爲繁瑣的操作頁面中DOM而煩惱了,並且Vue和Bootstrap並不是相互競爭的關係,而是可以很好的互爲補充,官網:https://cn.vuejs.org/
圖形圖表:數據的可視化展現可以給web項目帶來強大的視覺衝擊力,這方面的的js組件相當多,推薦採用百度的Echarts,推薦理由強大、直觀、易用:https://www.echartsjs.com/zh/index.html
Spring Security:web系統中角色權限控制模塊是必不可少的,利用Spring Security可以很好的實現角色權限控制,功能也相當強大。
Spring AOP:面向切面編程,利用Spring AOP我們可以用非侵入式的方式實現我們在整個系統中需要的功能,如日誌記錄、性能監控、事務管理等。
業務報表:報表生成也是實際系統必不可少的一個模塊,這裏我推薦開源報表JasperReport,推薦理由:強大、靈活的報表生成工具,能夠展示豐富的頁面內容,並將之轉換成PDF,HTML,或者XML格式,使用者也是相當多。
websocket:WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據,如果對主動向頁面推送消息(區別於主動查詢)的需求比較迫切,那麼websocket就必須掌握(當然,您不用websocket也能實現前端消息的通知,那就是通過js定時向後端發起請求來獲取新消息,但這樣太不夠優雅了)。
Redis緩存:這個就不用強調了,只要做web開發的,都知道緩存對系統性能的提升能力;
quartz定時器:一般系統只要存在計劃任務的,用quartz定時器是相當方便的,況且quartz定時器的規則是相當強大,基本上能滿足絕大多數複雜的計劃任務需求。

6、結束語

        如果上面的知識點掌握的差不多後,恭喜您,在此基礎上,你已經可以熟練的開展一般web項目的開發了,這個時候,你就可以抽出時間來折騰微服務(如Spring Cloud)、消息總線(如Kafka、RabbitMQ、RocketMQ )、容器(如Docker)等等了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章