Spring高級技術梳理

序言

在學習了Spring框架後 ,我們又學習了SpringMVC , RBAC ,Shiro框架這些中級Spring知識, 如果感興趣的話請看本人Spring技術分類下面的最開始的博文.
而今天的主角便是本人耗時將近一個月學習的Spring全家桶系列 , 在學習完Spring高級階段想對所學習到的知識進行梳理,藉此回顧自己所學習到的知識
本系列除了SpringData部分, 其餘部分全部是基於SpringBoot 2.0以上版本, 更新則更強, 儘量不與主流脫節. 我們不是時代的弄潮兒, 我們只是先進技術的追隨者~~~

正文

提示,點擊每段介紹下面的藍色字體 ,即可跳轉至相對應的博文哦~~~

SpringData部分

Spring全家桶之SpringData——預科階段

講述了SpringData 所涉及的技術的簡介
Hibernate
JPA 標準
Hibernate JPA
SpringData
SpringData JPA
SpringData Redis
Spring全家桶之SpringData——預科階段

Spring全家桶之SpringData——Spring 整合Hibernate與Hibernate Jpa

Hibernate是一種ORM框架,ORM全稱爲 Object_Relative DateBase-Mapping,在Java對象與關係數據庫之間建立某種映射,以實現直接存取Java對象!

在這裏, 我們搭建了一個Hibernate簡單環境 ,用來測試相關的語法 ,通過hibernate完成crud操作.並通過Hibernate實現 HQL查詢(Hibernate Query Language) , SQL查詢 ,QBC查詢(QBC:Query By Criteria )
然後 , 又開始Spring整合Hibernate JPA的學習, 通過Hibernate JPA完成crud操作.並通過Hibernate Jpa實現 HQL查詢(Hibernate Query Language) , SQL查詢 ,QBC查詢(QBC:Query By Criteria )
Spring全家桶之SpringData——Spring 整合Hibernate與Hibernate Jpa

Spring全家桶之SpringData——Spring Data JPA

Spring Data JPA,即SpringData的Java持久層API , 是spring data 項目下的一個模塊。提供了一套基於JPA標準操作數據庫的簡化方案。底層默認的是依賴Hibernate JPA 來實現的。
Spring Data JPA 的技術特點:我們只需要定義接口並繼承Spring Data JPA 中所提供的接口就可以了。不需要編寫接口實現類。即可實現對數據庫的操作

在這裏, 介紹他的相關注解以及持久層 ,持久化, 持久化的相關操作等關鍵術語 ,然後進行實戰應用 : 搭建Spring Data JPA項目 .分別繼承了以下五個接口以及用戶自定義Repository接口的實現

接口名 作用
Repository接口 Repository 接口是Spring Data JPA 中爲我們提供的所有接口中的頂層接口
支持方法名稱命名規則查詢和@Query 註解查詢
CrudRepository接口 繼承了該接口 ,無需實現類即可完成如下操作 :支持增刪改查及其批量處理
PagingAndSortingRepository接口 主要用於處理簡單的分頁和排序
JpaRepository 接口 我們將其他接口的方法的返回值做適配處理。
可以使得我們在開發時更方便的使用對數據庫進行DML操作方法。
JpaSpecificationExecutor 不能單獨使用,需要配合 jpa 中的其他接口一起使用 ,
可以完成多條件查詢,並且支持帶條件和排序的分頁與查詢

最後, 使用SpringData JPA實現實體關係映射操作 ,包括:
一對一的關聯操作
一對多的關聯操作
多對多的關聯操作
Spring全家桶之SpringData——Spring Data JPA

Spring全家桶之SpringData——SpringData Redis

SpringDataRedis是Spring Data大家族中的一個成員,提供了在 Spring 應用中通過簡單的配置訪問redis服務,對reids底層開發包(Jedis, JRedis, and RJC)進行了高度封裝,RedisTemplate提供了redis各種操作、異常處理及序列化,支持發佈訂閱,並對spring 3.1 cache進行了實現。

在這裏 ,我們通過 SpringData技術整合了Redis ,實現了通過 SpringData 操作Redis數據庫的功能
Spring全家桶之SpringData——SpringData Redis(附相關jar包)

SpringBoot部分

Spring全家桶之SpringBoot——初級階段

Spring Boot 設計目的是用來簡化新Spring 應用的初始搭建以及開發過程。他擁有嵌入的Tomcat,無需部署WAR 文件 , Spring Boot 並不是對Spring 功能上的增強,而是提供了一種快速使用Spring 的方式。可以通過SpringBoot官網 快速構建SpringBoot項目, 自動爲你生成啓動類以及相關文件等

在SpringBoot的初級階段 ,學習了SpringBoot的啓動器 以及編寫了HelloWorld的入門案例 ;
再學習了SpringBoot整合Web的開發, 包括整合Servlet ,Filter ,Listener ,靜態資源以及實現文件上傳功能 ;
然後學習了 SpringBoot整合視圖層的技術, 包括整合Jsp技術,Thymeleaf技術,以及freeMarker技術;
最後學習了SpringBoot整合Mybatis技術 .
Spring全家桶之SpringBoot——初級階段

Spring全家桶之SpringBoot——高級階段

Spring Boot是一個簡化Spring開發的框架。用來監護spring應用開發,約定大於配置,去繁就簡,just run 就能創建一個獨立的,產品級的應用。我們在使用Spring Boot時只需要配置相應版本的SpringBoot父項目就可以用所有的Spring組件,簡單的說,SpringBoot就是整合了很多優秀的框架,不用我們自己手動的去寫一堆 xml 配置然後進行配置。從本質上來說,SpringBoot就是Spring,它做了那些沒有它你也會去做的Spring Bean配置。

在SpringBoot的高級階段,
我們首先學習了SpringBoot的數據校驗,即對前端 form表單的校驗, 包括對用戶名 ,密碼 ,年齡 ,郵箱等進行校驗.
再學習了SpringBoot的異常處理與單元測試 , 捕獲指定異常 ,在自定義的頁面現實錯誤信息
然後學習了SpringBoot的熱部署 , 令我們不需要手動重啓項目即可使修改的代碼生效
然後學習了SpringBoot整合SpringData JPA五種接口的使用以及實體關係映射操作
Spring全家桶之SpringBoot——高級階段

SpringCloud部分

Spring全家桶之SpringCloud——初級階段

Spring Cloud是一系列框架的有序集合。 它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啓動和部署。
Spring Cloud並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝 , 屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包。

在SpringBoot的初級階段,
我們首先學習了四種架構風格 ,MVC, RPC, SOA, 微服務架構以及微服務的設計原則,特別是AKF拆分原則的學習,
再學習了SpringCloud的簡介 ,版本號以及與子項目兼容介紹 ,與Dubbo的性能對比,
然後進入了SpringBoot實戰(做小項目), 官網快速構建項目, 修改pom座標和全局配置文件 ,異常處理以及健康監控
再然後進入了RabbitMQ實戰, 搭建環境並編寫案例源碼, 三種交換器, 實現服務鬆耦合以及消息的處理,
最後學習了Eureka註冊中心, 搭建Eureka服務註冊中心以及註冊中心集羣, 併發布到指定虛擬機或服務器中 ,
並且對Eureka進行優化, 優雅停服的實現, 講述Eureka的安全認證
Spring全家桶之SpringCloud——初級階段

Spring全家桶之SpringCloud——高級階段(上)

在SpringCloud高級階段的第一部分, 我們首先學習了負載均衡Ribbon ,
服務之間的通訊方式有兩種 :一種是負載均衡 Ribbon ,一種是聲明式調用 Feign
Ribbon 是一個基於 Http 和 TCP 的客服端負載均衡工具,它是基於 Netflix Ribbon 實現的。
它不像 spring cloud 服務註冊中心、配置中心、API 網關那樣獨立部署,
但是它幾乎存在於每個 spring cloud 微服務中。 包括 feign 提供的聲明式服務調用也是基於該 Ribbon 實現的。
ribbon 默認提供很多種負載均衡算法, 例如: 輪詢、隨機 等等。甚至包含自定義的負載均衡算法。

然後學習了聲明式調用 Feign ,Spring Cloud 的聲明式調用, 可以做到使用 HTTP 請求遠程服務時能就像調用本地方法一樣的體驗,開發者完全感知不到這是遠程方法,更感知不到這是個 HTTP 請求。它像 Dubbo 一樣,consumer 直接調用接口方法調用 provider,而不需要通過常規的 Http Client 構造請求再解析返回數據。它解決了讓開發者調用遠程接口就跟調用本地方法一樣,無需關注與遠程的交互細節,更無需關注分佈式環境開發。

最後學習了服務容錯保護Hystrix ,用來微服務項目因爲軟件或硬件原因出現的雪崩效應, 它提供了五種解決方式:
降級, 隔離, 熔斷, 請求緩存, 請求合併. 我們將整合這五個方案結合案例源碼進行學習
Spring全家桶之SpringCloud——高級階段(上)

Spring全家桶之SpringCloud——高級階段(中)

在SpringCloud高級階段的第二部分, 我們首先學習了微服務的常用的六種設計模式, 並進行案例模擬

再學習了服務網關Zuul ,API網關是一個反向路由:屏蔽內部細節,爲調用者提供統一入口,接收所有調用者請求,通過路由機制轉發到服務實例。API網關是一組“過濾器”集合:可以實現一系列與核心業務無關的橫切面功能,如安全認證、限流熔斷、日誌監控。
我們進行了案例模擬, 然後總結了常用的路由規則 ,自定義網關過濾器(權限驗證與異常處理), 網關容錯, 在高併發情況下, 實現限流打到自我保護, 以及超時問題解決

然後學習了分佈式服務配置中心, 配置中心入門案例(配置中心客戶端和服務端的搭建), "GitHub的中文版-碼雲"的使用方式, 配置中心配置文件的命名與訪問規則, bootstrap與application的區別

最後學習了對配置文件的安全與加密, 使用對稱加密和非對稱加密算法 ,實現敏感數據加密( 例如數據庫的用戶名和密碼 )以及配置中心的用戶安全認證的實現, 在一定程度上保護了配置文件
Spring全家桶之SpringCloud——高級階段(中)

Spring全家桶之SpringCloud——高級階段(下)

在SpringCloud高級階段的第二部分, 我們首先學習了消息總線Bus,
SpringCloud bus集成了市面上常用的消息代理 ,(RabbitMQ ,Kafka) ,連接服務中的所有節點 .
當有數據有變更時 ,可以通過代理廣播通知微服務及時變更數據 ,例如微服務的配置更新
它的出現解決了微服務數據變更 , 及時同步問題 .進行了案例模擬.實現了採用bus 實現自動刷新配置信息Sever( 服務端)與Client ( 客戶端)的刷新以及局部刷新的實現.

然後習了消息驅動Stream, Spring Cloud Stream是一個構建消息驅動微服務應用的框架。它基於Spring Boot構建獨立的、生產級的Spring應用,並使用Spring Integration爲消息代理提供鏈接。你可以添加@EnableBinding註解到你的應用中來快速連接到消息代理,添加@StreamListener註解到一個方法上,這個方法會接收到Stream處理事件。進行了案例模擬, 並實現了Stream消息的分組與分區

最後學習了分佈式服務跟蹤Sleuth, 由於單體架構變爲微服務架構, 並且系統規模越來越大, 各個服務之間的關係變得越來越複雜, 這就是分佈式服務跟蹤技術Sleuth出現的背景, 它能夠爲我們提供鏈路追蹤,性能分析, 數據分析和優化鏈路, 併爲我們提供可視化界面. 通過將項目和ELK進行整合 ,方便我們跟蹤分析日誌
Spring全家桶之SpringCloud——高級階段(下)

SpringCloud技術拓展部分

Spring全家桶之SpringSession

在這裏, 我們首先學習了HttpSession, 他是 JavaWeb 服務端提供的用來建立與客戶端會話狀態的對象
介紹了SpringSession以及使用, 安裝redis單機版的教程, 共享簡單數據以及自定義對象,設計Session的失效時間以及更換其序列化器

然後學習了Spring Session MongoDB, 他與HttpSession,不同之處是它是用MongoDB作爲Session的緩存場所, 而後者使用的Redis作爲緩存數據存放的場所. 但他們都是用來解決Session 共享問題, 講解了MongoDB單機版的安裝, 共享簡單數據以及自定義對象,設計Session的失效時間以及更換其序列化器
Spring全家桶之SpringSession

Spring全家桶之SpringSecurity

SpringSecurity 是一個高度自定義的安全框架。利用 SpringIoC/DI和 AOP 功能,爲系統提供了聲明式安全訪問控制功能,減少了爲系統安全而編寫大量重複代碼的工作.
正如你可能知道的兩個應用程序的兩個主要區域是“認證”和“授權”(或者訪問控制)。這兩點也是 SpringSecurity 重要核心功能。“認證”,是建立一個他聲明的主體的過程(一個“主體”一般是指用戶,設備或一些可以在你的應用程序中執行動作的其他系統),通俗點說就是系統認爲用戶是否能登錄。“授權”指確定一個主體是否允許在你的應用程序執行一個動作的過程。通俗點講就是系統判斷用戶是否有權限去做某些事情。

在這裏,我們首先進行了案例模擬, 講解了UserDetailsService 的作用,自定義登陸邏輯與登陸頁面
然後學習了認證過程中的其他常用配置,訪問控制url的配置, 內置方法的介紹以及角色權限的判斷
再然後學習自定義403(權限不足)頁面的處理, 常見狀態碼介紹, 基於表達式和註解的訪問控制
最後學習了RememberMe(免登陸)功能的實現, 然後在學習Spring Security 中的CSRF後華麗落幕
Spring全家桶之SpringSecurity

Spring全家桶之分佈式事務處理技術之LCN

分佈式事務是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於不同的分佈式系統的不同節點之上。在設計LCN框架之初的1.0 ~ 2.0 的版本時,框架設計的步驟是如下的,各取其首字母得來的LCN 命名。LCN: 鎖定事務單元(lock)、確認事務模塊狀態(confirm)、通知事務(notify) , 他的宗旨 : LCN 並不生產事務,LCN 只是本地事務的協調工。

在這裏我們通過案例模擬的形式, 學習了使用LCN 實現分佈式事務處理服務端和服務端的配置並實現相關功能
以及有待解決的功能——在服務網關中配置LCN。 這裏需要注意的是本博文介紹的分佈式事務處理是基於SpringCloud 的環境下實現的
分佈式事務處理技術之LCN

Spring高級技術應用——項目實戰

Spring高級技術應用——百戰商城實現(上)

一、項目介紹
二、前臺系統
三、技術選型及版本
四、項目環境搭建
五、開發百戰商城後臺系統
六、開發百戰商城前臺系統
Spring高級技術應用——百戰商城實現(上)

Spring高級技術應用——百戰商城實現(下)

六、開發百戰商城前臺系統(續)
七、用戶註冊與登錄服務——單點登錄(SSO)功能實現
八、開發百戰商城前臺系統
九、在項目中配置分佈式配置中心
十、通過Hystrix 對下游服務做降級處理
十一、分佈式日誌管理
十二、 項目部署
Spring高級技術應用——百戰商城實現(下)

Spring全家桶之技巧合集系列

三步讓你在Linux中發佈SpringCloud項目

將一些微服務的服務端, 如Eureka服務端/服務端集羣等發佈到虛擬機或者服務器上面 傳送門

結語

希望能夠幫到大家, 同時也希望通過總結提升, 能夠幫助自己建立起一套屬於自己的Spring知識體系
學習永無止境, 全家桶系列永不斷更!
歲月雖靜好, 仍需負重行~~~

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