內容簡介
本書針對Spring Boot 2.0以上版本,採用“知識點+實例”的形式編寫。通過“58個基於知識的實例 + 2個綜合性的項目”,深入地講解Spring Boot的技術原理、知識點和具體套用。把晦澀難懂的理論用實例展現出來,使得讀者對知識的理解變得非常容易,同時也立即學會如何使用它。要成為一本有溫度的書,只做到上面這些還遠遠不夠。所以,本書花費大量的力氣對比講解多種同類技術的知識、使用和區別,讀者可以根據自己的喜歡進行技術選型;還講解了時下流行的接口架構風格RESTFUL、用來實現高並發的Redis、用來實現系統間通信的中間件RabbitMQ。最後兩章融合了本書所講知識點,講解了兩個常用又實用的實戰項目。本書適合所有對Spring Boot感興趣的讀者閱讀。
圖書目錄
目錄
+++++++++入 門 篇
第1章 進入Spring Boot世界 /2
1.1 認識Spring Boot /2
∣1.1.1 什麼是Spring Boot /2
∣1.1.2 Spring、Spring Boot、Spring Cloud的關係 /4
∣1.1.3 Spring Boot的特色 /5
∣1.1.4 Spring Boot支持的開發語言 /6
∣1.1.5 學習Spring Boot的前景展望 /6
1.2 學習Spring Boot的建議 /7
∣1.2.1 看透本書理論,模仿實戰例子 /7
∣1.2.2 利用開發工具自動學習 /7
∣1.2.3 發現新功能的方法 /8
∣1.2.4 建立高階的思維方式 /9
∣1.2.5 控制版本,降低犯錯的代價 /10
∣1.2.6 獲取最新、最全的資料 /11
∣1.2.7 學會自己發現和解決問題 /11
∣1.2.8 善於提問,成功一半 /12
第2章 準備開發環境 /14
2.1 搭建環境 /14
∣2.1.1 安裝Java開發環境JDK /14
∣2.1.2 配置JDK的環境變數 /15
2.2 熟悉Maven /18
∣2.2.1 安裝及配置Maven /18
∣2.2.2 認識其中的pom.xml檔案 /19
∣2.2.3 Maven的運作方式 /23
∣2.2.4 配置國內倉庫 /23
第3章 使用開發工具 /25
3.1 安裝開發工具IDEA及外掛程式 /25
∣3.1.1 安裝IDEA /25
∣3.1.2 配置IDEA的Maven環境 /27
∣3.1.3 安裝Spring Assistant外掛程式 /27
∣3.1.4 安裝外掛程式Lombok /28
3.2 【實例1】用Spring Boot輸出“Hello World” /30
∣3.2.1 構建Spring Boot項目 /30
∣3.2.2 編寫控制器,實現輸出功能 /31
∣3.2.3 在IDEA中運行程式 /33
∣3.2.4 打包成可執行的JAR包 /33
3.3 在Eclipse中開發Spring Boot應用程式 /35
∣3.3.1 安裝Eclipse /35
∣3.3.2 安裝Spring Tools 4外掛程式 /35
∣3.3.3 配置Eclipse的Maven環境 /36
∣3.3.4 創建Spring Boot項目 /37
3.4 了解Spring官方開發工具STS /37
3.5 必會的IDEA實用技能 /38
∣3.5.1 智慧型提示代碼 /38
∣3.5.2 自動提示參數 /39
∣3.5.3 實現自動轉義 /39
∣3.5.4 自定義高復用代碼塊 /40
∣3.5.5 設定注釋信息 /41
∣3.5.6 超能的“Alt+Enter”快捷鍵 /42
∣3.5.7 使用全局配置 /42
∣3.5.8 自動生成語句 /43
3.6 比較IDEA與Eclipse /44
3.7 如何使用本書原始碼 /47
∣3.7.1 在IDEA中使用 /47
∣3.7.2 在Eclipse(STS)中使用 /47
∣
+++++++++基 礎 篇
第4章 Spring Boot基礎 /50
4.1 了解Spring Boot /50
∣4.1.1 了解Spring Boot項目結構 /50
∣4.1.2 了解Spring Boot的入口類 /51
∣4.1.3 了解Spring Boot的自動配置 /52
∣4.1.4 了解Spring Boot熱部署 /52
∣4.1.5 【實例2】定製啟動畫面 /53
4.2 Spring Boot的常用註解 /54
∣4.2.1 什麼是註解式編程 /55
∣4.2.2 了解系統註解 /55
∣4.2.3 Spring Boot的常用註解 /56
4.3 使用配置檔案 /61
∣4.3.1 【實例3】演示如何使用application.yml檔案 /62
∣4.3.2 【實例4】演示如何使用application.properties檔案 /65
∣4.3.3 【實例5】用application.yml和application.properties配置多環境 /67
4.4 Spring Boot的Starter /69
∣4.4.1 了解Starter /69
∣4.4.2 使用Starter /70
第5章 分層開發Web應用程式 /71
5.1 應用程式分層開發模式——MVC /71
∣5.1.1 了解MVC模式 /71
∣5.1.2 MVC和三層架構的關係 /72
5.2 使用視圖技術Thymeleaf /73
∣5.2.1 認識Thymeleaf /73
∣5.2.2 基礎語法 /75
∣5.2.3 處理循環遍歷 /78
∣5.2.4 處理公共代碼塊 /80
∣5.2.5 處理分頁 /81
∣5.2.6 驗證和提示錯誤訊息 /82
∣5.2.7 【實例6】編寫Thymeleaf視圖以展示數據 /83
5.3 使用控制器 /85
∣5.3.1 常用註解 /85
∣5.3.2 將URL映射到方法 /86
∣5.3.3 處理HTTP請求的方法 /87
∣5.3.4 處理內容類型 /89
∣5.3.5 在方法中使用參數 /90
5.4 理解模型 /93
5.5 【實例7】實現MVC模式的Web應用程式 /94
∣5.5.1 添加依賴 /94
∣5.5.2 創建實體模型 /95
∣5.5.3 創建控制器 /95
∣5.5.4 創建用於展示的視圖 /96
5.6 驗證數據 /96
∣5.6.1 認識內置的驗證器Hibernate∣validator /96
∣5.6.2 自定義驗證功能 /98
∣5.6.3 【實例8】驗證表單數據並實現數據的自定義驗證 /99
第6章 回響式編程 /103
6.1 認識回響式編程 /103
∣6.1.1 什麼是WebFlux /103
∣6.1.2 比較MVC和WebFlux /103
∣6.1.3 認識Mono和Flux /105
∣6.1.4 開發WebFlux的流程 /106
6.2 【實例9】用註解式開發實現Hello World /107
∣6.2.1 配置WebFlux依賴 /107
∣6.2.2 編寫控制器 /107
6.3 【實例10】用註解式開發實現數據的增、刪、改、查 /108
∣6.3.1 創建實體類 /108
∣6.3.2 編寫控制器 /108
∣6.3.3 測試API功能 /110
6.4 【實例11】用回響式開發方式開發WebFlux /111
∣6.4.1 編寫處理器類Handler /111
∣6.4.2 編寫路由器類Router /112
6.5 【實例12】用WebFlux模式操作MongoDB資料庫,實現數據的增、刪、改、查功能 /112
∣6.5.1 添加依賴 /112
∣6.5.2 創建實體類 /113
∣6.5.3 編寫接口 /113
6.5.4 編寫增、刪、改、查數據的API /113
∣
+++++++++進 階 篇
第7章 Spring Boot進階 /118
7.1 面向切面編程 /118
∣7.1.1 認識Spring AOP /118
∣7.1.2 【實例13】用AOP方式管理日誌 /119
7.2 認識IoC容器和Servlet容器 /121
∣7.2.1 認識容器 /121
∣7.2.2 【實例14】用IoC管理Bean /123
∣7.2.3 【實例15】用Servlet處理請求 /125
7.3 過濾器與監聽器 /126
∣7.3.1 認識過濾器 /126
∣7.3.2 【實例16】實現過濾器 /128
∣7.3.3 認識監聽器 /128
∣7.3.4 【實例17】實現監聽器 /129
7.4 自動配置 /130
∣7.4.1 自定義入口類 /130
∣7.4.2 自動配置的原理 /131
∣7.4.3 【實例18】自定義Starter /133
7.5 元註解 /136
∣7.5.1 了解元註解 /136
∣7.5.2 【實例19】自定義註解 /137
7.6 異常處理 /138
∣7.6.1 認識異常處理 /138
∣7.6.2 使用控制器通知 /141
∣7.6.3 【實例20】自定義錯誤處理控制器 /142
∣7.6.4 【實例21】自定義業務異常類 /143
7.7 單元測試 /145
∣7.7.1 了解單元測試 /145
∣7.7.2 Spring Boot 的測試庫 /145
∣7.7.3 快速創建測試單元 /149
∣7.7.4 【實例22】Controller層的單元測試 /150
∣7.7.5 【實例23】Service層的單元測試 /153
∣7.7.6 【實例24】Repository層的單元測試 /154
第8章 用ORM操作SQL資料庫 /156
8.1 認識Java的資料庫連線模板JDBCTemplate /156
∣8.1.1 認識JDBCTemplate /156
∣8.1.2 【實例25】用JDBCTemplate實現數據的增、刪、改、查 /157
∣8.1.3 認識ORM /161
8.2 JPA——Java持久層API /161
∣8.2.1 認識Spring Data /161
∣8.2.2 認識JPA /162
∣8.2.3 使用JPA /164
∣8.2.4 了解JPA註解和屬性 /165
∣8.2.5 【實例26】用JPA構建實體數據表 /167
8.3 認識JPA的接口 /169
∣8.3.1 JPA接口JpaRepository /169
∣8.3.2 分頁排序接口PagingAndSortingRepository /169
∣8.3.3 數據操作接口CrudRepository /170
∣8.3.4 分頁接口Pageable和Page /170
∣8.3.5 排序類Sort /171
8.4 JPA的查詢方式 /171
∣8.4.1 使用約定方法名 /171
∣8.4.2 用JPQL進行查詢 /173
∣8.4.3 用原生SQL進行查詢 /174
∣8.4.4 用Specifications進行查詢 /175
∣8.4.5 用ExampleMatcher進行查詢 /177
∣8.4.6 用謂語QueryDSL進行查詢 /177
∣8.4.7 用NamedQuery進行查詢 /177
8.5 【實例27】用JPA開發文章管理模組 /178
∣8.5.1 實現文章實體 /178
∣8.5.2 實現數據持久層 /179
∣8.5.3 實現服務接口和服務接口的實現類 /179
∣8.5.4 實現增、刪、改、查的控制層API功能 /180
∣8.5.5 實現增、刪、改、查功能的視圖層 /182
8.6 實現自動填充欄位 /185
8.7 掌握關係映射開發 /187
∣8.7.1 認識實體間關係映射 /187
∣8.7.2 【實例28】實現“一對一”映射 /188
∣8.7.3 【實例29】實現“一對多”映射 /192
∣8.7.4 【實例30】實現“多對多”映射 /195
8.8 認識MyBatis——Java數據持久層框架 /197
∣8.8.1 CRUD註解 /198
∣8.8.2 映射註解 /198
∣8.8.3 高級註解 /199
8.9 【實例31】用MyBatis實現數據的增加、刪除、修改、查詢和分頁 /200
∣8.9.1 創建Spring Boot項目並引入依賴 /201
∣8.9.2 實現數據表的自動初始化 /201
∣8.9.3 實現實體對象建模 /202
∣8.9.4 實現實體和數據表的映射關係 /202
∣8.9.5 實現增、刪、改、查功能 /203
∣8.9.6 配置分頁功能 /204
∣8.9.7 實現分頁控制器 /205
∣8.9.8 創建分頁視圖 /206
8.10 比較JPA與MyBatis /207
第9章 接口架構風格——RESTful /209
9.1 REST——前後台間的通信方式 /209
∣9.1.1 認識REST /209
∣9.1.2 認識HTTP方法與CRUD動作映射 /210
∣9.1.3 實現RESTful風格的數據增、刪、改、查 /210
9.2 設計統一的RESTful風格的數據接口 /212
∣9.2.1 版本控制 /212
∣9.2.2 過濾信息 /213
∣9.2.3 確定HTTP的方法 /213
∣9.2.4 確定HTTP的返回狀態 /213
∣9.2.5 定義統一返回的格式 /214
9.3 【實例32】為手機APP、PC、H5網頁提供統一風格的API /214
∣9.3.1 實現回響的枚舉類 /214
∣9.3.2 實現返回的對象實體 /215
∣9.3.3 封裝返回結果 /215
∣9.3.4 統一處理異常 /215
∣9.3.5 編寫測試控制器 /219
∣9.3.6 實現數據的增、刪、改、查控制器 /220
∣9.3.7 測試數據 /221
9.4 【實例33】用Swagger實現接口文檔 /222
∣9.4.1 配置Swagger /222
∣9.4.2 編寫接口文檔 /224
9.5 用RestTemplate發起請求 /224
∣9.5.1 認識RestTemplate /224
∣9.5.2 【實例34】用RestTemplate傳送GET請求 /225
∣9.5.3 【實例35】用RestTemplate傳送POST請求 /228
∣9.5.4 用RestTemplate傳送PUT和DELETE請求 /231
第10章 集成安全框架,實現安全認證和授權 /233
10.1 Spring Security——Spring的安全框架 /233
∣10.1.1 認識Spring Security /233
∣10.1.2 核心類 /235
10.2 配置Spring Security /240
∣10.2.1 繼承WebSecurityConfigurer Adapter /240
∣10.2.2 配置自定義策略 /240
∣10.2.3 配置加密方式 /242
∣10.2.4 自定義加密規則 /242
∣10.2.5 配置多用戶系統 /242
∣10.2.6 獲取當前登錄用戶信息的幾種方式 /244
10.3 【實例36】用Spring Security實現後台登錄及許可權認證功能 /246
∣10.3.1 引入依賴 /246
∣10.3.2 創建許可權開放的頁面 /246
∣10.3.3 創建需要許可權驗證的頁面 /247
∣10.3.4 配置Spring Security /247
∣10.3.5 創建登錄頁面 /248
∣10.3.6 測試許可權 /249
10.4 許可權控制方式 /249
∣10.4.1 Spring EL許可權表達式 /249
∣10.4.2 通過表達式控制URL許可權 /250
∣10.4.3 通過表達式控制方法許可權 /252
∣10.4.4 【實例37】使用JSR∣250註解 /254
∣10.4.5 【實例38】實現RBAC許可權模型 /256
10.5 認識JWT /258
10.6 【實例39】用JWT技術為Spring Boot的API增加認證和授權保護 /260
∣10.6.1 配置安全類 /260
∣10.6.2 處理註冊 /261
∣10.6.3 處理登錄 /262
∣10.6.4 測試多方式註冊和登錄 /264
∣10.6.5 測試token方式登錄和授權 /265
10.7 Shiro——Apache通用安全框架 /266
∣10.7.1 認識Shiro安全框架 /266
∣10.7.2 認識Shiro的核心組件 /267
10.8 【實例40】用Shiro實現管理後台的動態許可權功能 /267
∣10.8.1 創建實體 /267
∣10.8.2 實現視圖模板 /270
∣10.8.3 進行許可權配置 /271
∣10.8.4 實現認證身份功能 /271
∣10.8.5 測試許可權 /272
10.9 對比Spring Security與Shiro /273
第11章 集成Redis,實現高並發 /275
11.1 認識Spring Cache /275
∣11.1.1 聲明式快取註解 /276
∣11.1.2 【實例41】用Spring Cache進行快取管理 /278
∣11.1.3 整合Ehcache /281
∣11.1.4 整合Caffeine /281
11.2 認識Redis /282
∣11.2.1 對比Redis與Memcached /282
∣11.2.2 Redis的適用場景 /285
11.3 Redis的數據類型 /285
11.4 用RedisTemplate操作Redis的5種數據類型 /287
∣11.4.1 認識opsFor方法 /287
∣11.4.2 【實例42】操作字元串 /287
∣11.4.3 【實例43】操作散列 /290
∣11.4.4 【實例44】操作列表 /294
∣11.4.5 【實例45】操作集合 /298
∣11.4.6 【實例46】操作有序集合 /301
∣11.4.7 比較RedisTemplate和StringRedisTemplate /306
11.5 【實例47】用Redis和MyBatis完成快取數據的增加、刪除、修改、查詢功能 /306
∣11.5.1 在Spring Boot中集成Redis /306
∣11.5.2 配置Redis類 /307
∣11.5.3 創建測試實體類 /308
∣11.5.4 實現實體和數據表的映射關係 /309
∣11.5.5 創建Redis快取服務層 /309
∣11.5.6 完成增、刪、改、查測試API /310
11.6 【實例48】用Redis和JPA實現快取文章和點擊量 /311
∣11.6.1 實現快取文章 /311
∣11.6.2 實現統計點擊量 /312
∣11.6.3 實現定時同步 /312
11.7 【實例49】實現分散式Session /313
∣11.7.1 用Redis實現Session共享 /313
∣11.7.2 配置Nginx實現負載均衡 /314
第12章 集成RabbitMQ,實現系統間的數據交換 /316
12.1 認識RabbitMQ /316
∣12.1.1 介紹RabbitMQ /316
∣12.1.2 使用場景 /317
∣12.1.3 特性 /318
12.2 RabbitMQ的基本概念 /318
∣12.2.1 生產者、消費者和代理 /318
∣12.2.2 訊息佇列 /319
∣12.2.3 交換機 /319
∣12.2.4 綁定 /320
∣12.2.5 通道 /321
∣12.2.6 訊息確認 /321
12.3 RabbitMQ的6種工作模式 /321
∣12.3.1 簡單模式 /321
∣12.3.2 工作佇列模式 /321
∣12.3.3 交換機模式 /322
∣12.3.4 Routing轉發模式 /322
∣12.3.5 主題轉發模式 /322
∣12.3.6 RPC模式 /323
12.4 認識AmqpTemplate接口 /323
∣12.4.1 傳送訊息 /324
∣12.4.2 接收訊息 /324
∣12.4.3 異步接收訊息 /325
12.5 在Spring Boot中集成RabbitMQ /325
∣12.5.1 安裝RabbitMQ /325
∣12.5.2 界面化管理RabbitMQ /326
∣12.5.3 在Spring Boot中配置RabbitMQ /327
12.6 在Spring Boot中實現RabbitMQ的4種傳送/接收模式 /328
∣12.6.1 【實例50】實現傳送和接收佇列 /328
∣12.6.2 【實例51】實現傳送和接收對象 /330
∣12.6.3 【實例52】實現用接收器接收多個主題 /331
∣12.6.4 【實例53】實現廣播模式 /334
12.7 【實例54】實現訊息佇列延遲功能 /336
第13章 集成NoSQL資料庫,實現搜尋引擎 /339
13.1 Elasticsearch——搜尋套用伺服器 /339
∣13.1.1 什麼是搜尋引擎 /339
∣13.1.2 用資料庫實現搜尋功能 /339
∣13.1.3 認識Elasticsearch /343
∣13.1.4 Elasticsearch套用案例 /343
∣13.1.5 對比Elasticsearch與MySQL /343
∣13.1.6 認識ElasticSearchRepository /344
∣13.1.7 認識ElasticsearchTemplate /345
∣13.1.8 認識註解@Document /345
∣13.1.9 管理索引 /347
13.2 【實例55】用ELK管理Spring Boot應用程式的日誌 /348
∣13.2.1 安裝Elasticsearch /348
∣13.2.2 安裝Logstash /349
∣13.2.3 安裝Kibana /350
∣13.2.4 配置Spring Boot項目 /350
∣13.2.5 創建日誌計畫任務 /351
∣13.2.6 用Kibana查看管理日誌 /352
13.3 【實例56】在Spring Boot中集成Elasticsearch,實現增、刪、改、查功能 /353
∣13.3.1 集成Elasticsearch /353
∣13.3.2 創建實體 /353
∣13.3.3 實現增、刪、改、查文檔的功能 /355
13.4 Elasticsearch查詢 /356
∣13.4.1 自定義方法 /356
∣13.4.2 精準查詢 /357
∣13.4.3 模糊查詢 /359
∣13.4.4 範圍查詢 /362
∣13.4.5 組合查詢 /362
∣13.4.6 分頁查詢 /363
∣13.4.7 聚合查詢 /364
13.5 【實例57】實現產品搜尋引擎 /365
13.6 Solr——搜尋套用伺服器 /367
∣13.6.1 了解Solr /367
∣13.6.2 安裝配置Solr /367
∣13.6.3 整合Spring Boot和Solr /368
13.7 【實例58】在Sping Boot中集成Solr,實現數據的增、刪、改和查 /369
∣13.7.1 創建User類 /369
∣13.7.2 測試增、刪、改、查功能 /369
13.8 對比Elasticsearch和Solr /372
∣
+++++++++項目實戰篇
第14章 開發企業級通用的後台系統 /376
14.1 用JPA實現實體間的映射關係 /376
∣14.1.1 創建用戶實體 /376
∣14.1.2 創建角色實體 /377
∣14.1.3 創建許可權實體 /378
14.2 用Spring Security實現動態授權(RBAC)功能 /380
∣14.2.1 實現管理(增、刪、改、查)管理員角色功能 /380
∣14.2.2 實現管理許可權功能 /381
∣14.2.3 實現管理管理員功能 /383
∣14.2.4 配置安全類 /384
∣14.2.5 實現基於RBAC許可權控制功能 /386
14.3 監控Spring Boot套用 /387
∣14.3.1 在Spring Boot中集成Actuator /387
∣14.3.2 在Spring Boot中集成Spring Boot Admin套用監控 /390
∣14.3.3 在Spring Boot中集成Druid 連線池監控 /392
第15章 實現一個類似“京東”的電子商務商城 /394
15.1 用Spring Security實現會員系統 /394
∣15.1.1 實現會員實體 /394
∣15.1.2 實現會員接口 /395
∣15.1.3 實現用戶名、信箱、手機號多方式註冊功能 /396
∣15.1.4 實現用RabbitMQ傳送會員註冊驗證郵件 /398
∣15.1.5 實現用戶名、信箱、手機號多方式登錄功能 /399
15.2 整合會員系統(Web、APP多端、多方式註冊登錄)和後台系統 /400
∣15.3 實現購物系統 /401
∣15.3.1 設計數據表 /401
∣15.3.2 實現商品展示功能 /402
∣15.3.3 實現購物車功能 /403
∣15.3.4 用Redis實現購物車數據持久化 /404
15.4 用Redis實現分散式秒殺系統 /406
∣15.4.1 實現搶購功能,解決並發超賣問題 /406
∣15.4.2 快取頁面和限流 /409
15.5 用RabbitMQ實現訂單過期取消功能 /409
15.6 實現結算和支付功能 /411
∣15.6.1 實現結算生成訂單功能 /411
∣15.6.2 集成支付 /412