Spring漫漫深耕路 - 記在掘金的第一次直播

2020年10月15日,本人有幸參與了掘金技術社區的一次直播活動,做爲主講人與小夥伴們分享了一些關於 Spring 方面的內容。此次分享的內容以概述爲主,主要幫小夥伴們理清楚學習 Spring 的思路,以及學完 Spring 框架以後的進一步規劃。react

寫這篇文章,主要是記錄一下當天分享的內容,以及一些後續的覆盤等等,幫助沒有遇上車的小夥伴們。git

【B站直播回放:www.bilibili.com/video/BV13i…github

Java開發生態中,Spring究竟有多重要

既然是聊 Spring ,那咱仍是要知道它的地位和份量。Spring 的地位想必都已經到 2020 年了,小夥伴們都很是的清楚。面試

Spring使Java變得簡單

在 Spring 的官方網站 spring.io 中,一上來咱們看到的就是 Spring 官方對 Spring 的描述:spring

Spring makes Java simple.modern.productive.reactive.cloud-ready.編程

Spring 使 Java 開發變得簡單、現代化,而且能夠編寫生產級別的應用、響應式的應用,而且也支持雲應用。json

包括下面主頁上也列出了 Spring 能夠作的內容:後端

可見,Spring 表明的不只僅是一個框架 / 一個技術,而是一整個生態。緩存

Spring是一個生態

翻開 Spring 官網的工程概覽 spring.io/projects ,咱們會發現裏面的工程實在是好多好多呀!安全

最頂部的兩個表明之做,分別是現階段最最流行的後端服務搭建基本框架 SpringBoot ,以及它的基底 SpringFramework :

往下看,還有關於數據訪問層的 SpringData 、用於解決微服務開發的總體解決方案 SpringCloud 、用於解決權限安全方面的 SpringSecurity 、用於解決 Session 外置的 SpringSession 等等,這些都是 Spring 生態中的一個個解決方案。

Spring的使用範圍極廣

若是隻是人家官方本身吹,那說服力很明顯不是很足,咱看看主流的比較受歡迎的開源項目,它們都用了什麼底層框架。

翻開碼雲的開源項目 gitee.com/explore/bac… ,觀察這些比較受歡迎的後臺管理系統都是用什麼搭建的:

可見這些開源項目都是基於 Spring / SpringBoot 搭建的!這足夠有說服力了吧,連這些主流的、受歡迎的項目都是用 Spring 搭建的,那就足以說明 Spring 真的足夠的強大了。

Spring是面試常客

最後一個點是關於面試,一直以來面試中就容易問到 Spring 這個框架,並且近年來難度有上升趨勢,小夥伴們看如下幾個問題都能回答多少呢:

  • 如何理解 Spring 中的 IOC ?
  • Bean 的生命週期包括哪些階段?
  • Spring 如何處理循環依賴?
  • Spring 的事務在什麼狀況下會失效?
  • DispatcherServlet 的工做流程?

這些問題,在 Spring 的小冊,以及 SpringBoot 的小冊中,都有相應的解答,小冊總結的面試題不少,若是小夥伴們有在準備面試的話,小冊會是你備戰的一個堅實的依靠。

如何才能全方面的掌握Spring

那既然 Spring 如此的重要,咱們應該如何全方面的去學習、掌握 Spring 這個框架呢?

簡單的來說,咱們能夠分爲 4 個部分來學習:

IOC

IOC 的部分是整個 Spring 框架最強大,同時也是最複雜的部分,這裏麪包含的知識點實在是太多了,咱能夠簡單地羅列一下:

  • IOC 的思想及實現方式
    • IOC 的兩種實現方式分別是依賴查找、依賴注入
    • 如何實現依賴查找、依賴注入,都有哪些編碼實現的方式
  • Bean 的註冊、建立、裝配等
    • Bean 的類型、做用域
    • Bean 的建立方式、裝配方式
    • 組件掃描
  • Bean 與 BeanDefinition
    • Bean 的定義是如何設計的
    • BeanDefinition 如何與 IOC 容器配合建立 bean 實例
  • 事件驅動、資源管理、後置處理器
  • Bean 、IOC 容器的生命週期
  • ......

這些知識點,在 《從 0 開始深刻學習 Spring》的小冊中,所有都會講到,並且難度都是逐層遞進的,包括其中涉及到的面試題總結等等。

AOP&事務

Spring 的兩大核心,除了 IOC 以外,另一個就是 AOP 了。咱都知道 AOP 的核心底層實現是動態代理,那它是怎麼實現的,如何編寫 AOP 的切面;以及 Spring 中對於 AOP 的一個實現:事務管理,它又是怎麼使用的,如何編程式 / 聲明式 / 配置式的添加事務,以及它的底層如何實現事務控制,這都是在 AOP 和事務部分要學習的。

這個部分的內容大概能夠劃分爲以下內容:

  • AOP 與動態代理
    • jdk / Cglib
  • AOP 的實現、應用
    • 日誌打印
    • 權限攔截
  • 事務管理
    • 編程式 / 聲明式 / 配置式添加事務
    • 事務傳播行爲
  • AOP & 事務控制底層核心
    • AOP 如何建立代理對象
    • 事務管理器如何控制開啓 / 提交 / 回滾事務

Web

大多數人都喜歡把 Spring 跟 SpringMVC 分開來講,但確切的說,SpringMVC 是 Spring 框架的一部分,而且自打 Spring 5 出現以後,SpringMVC 多了一個孿生兄弟 SpringWebFlux ,因此 SpringMVC 也被稱爲 SpringWebMvc 了。

一樣的,Web 模塊中 Spring 也是重拳出擊,這部份內容主要圍繞如下的一些關鍵知識點來學習:

  • Spring 整合 Web 工程
  • SpringWebMvc
    • 控制器的編寫與使用
    • 參數綁定
    • 數據校驗
    • 國際化
    • 攔截器
  • WebMvc 中的核心組件工做機制、流程、原理
    • DispatcherServlet
    • HandlerMapping
    • HandlerAdapter
    • ViewResolver
    • ......

SpringWebFlux 由於用的人還不多,並且理解的難度相對很大,因此這裏咱們只是提一下,若是小夥伴已經熟練掌握了 SpringWebMvc ,那能夠試着學習一下 WebFlux 的東西。

整合

若是隻是由於 Spring 這個框架自己強大的話,還不足以在整個 JavaWeb 的開發界獨佔鰲頭,它優秀且強大的整合第三方技術的能力絕對是不可或缺的一部分。一般來說咱們接觸的比較多的、比較知名的技術,幾乎都與 Spring 框架進行了整合。

這裏面不乏包含咱熟悉的技術:

  • 數據持久層框架:MyBatis 、Hibernate
  • 緩存中間件:Redis 、MongoDB
  • 消息中間件:RabbitMQ 、Kafka
  • 搜索引擎:ElasticSearch 、Solr
  • ......

學習這些技術的時候,必定要記得順便學習它與 Spring 的整合。

學習的思路

對於 Spring 框架的學習,做者能夠提供兩種思路:

水平式學習
  • 第一階段
    • 先學習 Spring 中 IOC 部分相關的基礎內容
      • 包括 IOC 的實現方式,依賴注入的方式
      • Bean 的類型、做用域、建立方式、生命週期控制等等
    • 而後學習 AOP 部分的基礎內容
      • 複習一下動態代理
      • 學習 xml / 註解的方式編寫 AOP 的切面等等
    • 接下來是事務部分的基礎
      • Spring 如何整合 jdbc
      • JdbcTemplate 的使用
      • 如何使用編程式事務、聲明式事務
    • 最後學習 SpringWebMvc 的一些基礎
      • 包括控制器的編寫、參數綁定、響應 json 、攔截器等等
    • 等這些基礎部分學習完畢後,基本上 Spring 的基礎知識你就都掌握了,這些知識能夠應對大部分的實際編碼場景
  • 後續階段
    • 依次學習 IOC 、AOP 、事務 、Web 等模塊的進階、高級知識
    • 這種層層遞進的方式,能夠稱其爲 「水平式學習」

垂直式學習
  • 第一階段
    • 仍是先學習 IOC 相關的基礎知識
      • IOC 的實現方式,依賴注入的方式
      • Bean 的類型、做用域、建立方式、生命週期控制等等
    • 而後,繼續學習 IOC 部分的進階知識
      • 包括 IOC 容器的設計、思想
      • Bean 的裝配、組件掃描
      • 事件驅動
      • 資源管理、資源文件等等
    • 接下來繼續學習 IOC 部分的高級內容
      • Bean 、BeanDefinition
      • BeanFactory 、BeanDefinitionRegistry
      • 後置處理器
      • 深刻底層等
    • 這個階段學習完成以後,能夠說,整個 Spring 的 IOC 模塊核心知識點,你基本上已經所有掌握了
  • 後續階段
    • 按照這個順序繼續學習 AOP 、事務 、Web 模塊的各個層級的知識
    • 這種分模塊學習,每一個模塊都是由淺入深的學習思路,能夠稱其爲 「垂直式學習」

兩種方法思路任選其一,根據本身的學習風格、思惟和習慣來就好。

不止是學習 Spring ,學習其它框架 / 技術時,這兩種思路一樣適用。

掌握Spring以後如何做中長期規劃

Spring 框架學習完畢以後,接下來的規劃也是相當重要的。明確本身目前所處的位置,並針對本身的狀況制定中長期的規劃,對本身的整個職業生涯的重要性不言而喻。做者在此也只是提一些導向性的建議,幫助小夥伴們理清本身。

  • 若是 Spring 是你的第一個學習的框架 / 剛學完 SSM
    • 那麼接下來你最好先停下來,把這部分的知識鞏固住,而且找一個實際的項目 / 需求作一下,體會一下項目開發的感受,順便這個期間你的基礎知識也就能獲得鞏固了
  • 若是 Spring 框架自己已經掌握的不錯了
    • 後續的計劃能夠圍繞着 Spring 的生態展開,SpringBoot 是一個很是好的選擇,由於 SpringBoot 是徹底構建於 Spring 框架之上,它充分利用了 Spring 底層設計的機制,也擴展了一些新的機制(如自動裝配、新的後置處理器等)
  • 若是 Spring 和 SpringBoot 都基本掌握了
    • 那麼中長期的規劃能夠從兩種路線出發
    • 要麼,繼續進攻 SpringCloud 微服務解決方案,瞭解和實踐微服務開發
    • 要麼,研究學習主流的開源中間件(Redis 、RabbitMQ 、ElasticSearch 等),擴充技術棧的廣度

Q&A

還沒畢業的同窗,實習以前須要掌握SpringCloud嗎

回答:不須要。

緣由:對於初入職場的小夥伴,公司更看重的是你的基本功,基本功紮實,想必可塑性都不會差。因此,儘量的讓你的基礎知識掌握得更牢靠吧(JavaSE 、JavaWeb 、基本的框架等)。

AOP在哪些場景下會失效

回答:通常發生在後置處理器的初始化階段。

原理:可參照小冊第 34 章和第 48 章(後續更新)。

JavaSE的源碼閱讀起來有些吃力,有什麼好辦法嗎

回答:可參考開源項目 learningjdk 。

github.com/kangjianwei…

學習SpringBoot和Cloud以前須要先學習Servlet嗎

回答:必須的。

緣由:兄dei,若是你連 HttpServletRequest 和 HttpServletResponse 都搞不明白,學 SpringBoot 開發 Web 場景的功能時,豈不就直接廢了?Servlet 方面的知識是 JavaWeb 的基礎,SpringWebMvc 是構建在 JavaWeb 之上的,SpringBoot 又是整合 SpringWebMvc 的,因此按照這個依賴關係,Servlet 固然是一個必學項啦,並且是基礎的必學項。

框架的高級知識如何能記得更牢靠

回答:多寫多用多練。

小夥伴們捫心自問一下,你一開始學習那些框架、知識等等的,發現有這樣那樣的高級知識,你學會了,哇塞我牛X了,我直接蕪湖起飛了!但是,你真的有在實際場景下用過嗎?對於咱搞開發的來說,知識不是學了就能記住的,必定要多加練習,這個學習沒有捷徑,你看到的熟練都是背後有大量付出的。


寫在最後

初次參與直播分享,前期準備的也比較有限,不免會出現有些地方的疏漏、或者交流不充分不到位的地方,敬請小夥伴們海涵和指正。小夥伴們能夠經過加入掘金直播分享羣找到我,或者經過郵箱 LinkedBear@163.com 與我聯繫。後續有機會的話,我也會繼續參加咱掘金的直播,繼續與各位小夥伴做有關 Spring 及生態相關的技術分享和交流。

最後,感謝各位小夥伴的捧場,也感謝掘金官方工做人員的辛勤付出,各位都辛苦啦!

相關文章
相關標籤/搜索