●入門篇
第1章 進入Spring Boot世界2
1.1 認識Spring Boot2
1.1.1 什麼是Spring Boot2
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開發環境JDK14
2.1.2 配置JDK的環境變量15
2.2 熟悉Maven18
2.2.1 安裝及配置Maven18
2.2.2 認識其中的pom.xml文件19
2.2.3 Maven的運作方式23
2.2.4 配置國內倉庫23
第3章 使用開發工具25
3.1 安裝開發工具IDEA及插件25
3.1.1 安裝IDEA25
3.1.2 配置IDEA的Maven環境27
3.1.3 安裝Spring Assistant插件27
3.1.4 安裝插件Lombok28
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 安裝Eclipse35
3.3.2 安裝Spring Tools 4插件35
3.3.3 配置Eclipse的Maven環境36
3.3.4 創建Spring Boot項目37
3.4 了解Spring官方開發工具STS37
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與Eclipse44
3.7 如何使用本書源代碼47
3.7.1 在IDEA中使用47
3.7.2 在Eclipse(STS)中使用47
基礎篇
第4章 Spring Boot基礎50
4.1 了解Spring Boot50
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的Starter69
4.4.1 官方的Starter69
4.4.2 使用Starter70
第5章 分層開發Web應用程序71
5.1 應用程序分層開發模式——MVC71
5.1.1 了解MVC模式71
5.1.2 MVC和三層架構的關繫72
5.2 使用視圖技術Thymeleaf73
5.2.1 認識Thymeleaf73
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-validator96
5.6.2 自定義驗證功能98
5.6.3 實例8:驗證表單數據並實現數據的自定義驗證99
第6章 響應式編程103
6.1 認識響應式編程103
6.1.1 什麼是WebFlux103
6.1.2 比較MVC和WebFlux103
6.1.3 認識Mono和Flux105
6.1.4 開發WebFlux的流程106
6.2 實例9:用注解式開發實現Hello World107
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:用響應式開發WebFlux111
6.4.1 編寫處理器類Handler111
6.4.2 編寫路由器類Router112
6.5 實例12:用WebFlux模式操作MongoDB數據庫,實現數據的增加、刪除、修改和查詢功能112
6.5.1 添加依賴112
6.5.2 創建實體類113
6.5.3 編寫接口113
6.5.4 編寫增加、刪除、修改和查詢數據的API113
進階篇
第7章 Spring Boot進階118
7.1 面向切面編程AOP118
7.1.1 認識Spring AOP118
7.1.2 實例13:用AOP方式管理日志119
7.2 認識IoC容器和Servlet容器121
7.2.1 認識容器121
7.2.2 實例14:用IoC管理Bean123
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:自定義Starter133
7注解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.測試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的數據庫連接模板JDBCTemplate156
8.1.1 認識JDBCTemplate156
8.1.2 實例25:用JDBCTemplate實現數據的增加、刪除、修改和查詢157
8.1.3 認識ORM161
8.2 JPA——Java持久層API161
8.2.1 認識Spring Data161
8.2.2 認識JPA162
8.2.3 使用JPA164
8.2.4 JPA注解和屬性介紹165
8.2.5 實例26:用JPA構建實體數據表167
8.3 認識JPA的接口169
8.3.1 JPA接口JpaRepository169
8.3.2 分頁排序接口PagingAndSortingRepository169
8.3.3 數據操作接口CrudRepository170
8.3.4 分頁接口Pageable和Page170
8.3.5 排序類Sort171
8.4 JPA的查詢方式171
8.4.1 約定方法名171
8.4.2 JPQL173
8.4.3 原生SQL174
8.4.4 Specifications175
8.4.5 ExampleMatcher177
8.4.6 謂語QueryDSL177
8.4.7 NamedQuery177
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與MyBatis207
第9章 接口架構風格——RESTful209
9.1 REST——前後臺間的通信方式209
9.1.1 認識REST209
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網頁提供統一風格的API214
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 配置Swagger222
9.4.2 編寫接口文檔224
9.5 用RestTemplate發起請求224
9.5.1 認識RestTemplate224
9.5.2 實例34:用RestTemplate發送GET請求225
9.5.3 實例35:用RestTemplate發送 T請求228
9.5.4 用RestTemplate發送PUT和DELETE請求231
第10章 集成安全框架,實現安全認證和授權233
10.1 Spring Security——Spring的安全框架233
10.1.1 認識Spring Security233
10.1.2 核心類235
10.2 配置Spring Security240
10.2.1 繼承WebSecurityConfigurer-Adapter240
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 Security247
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 認識JWT258
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與Shiro273
第11章 在Spring Boot中使用Redis實現高並發275
11.1 認識Spring Cache275
11.1.1 聲明式緩存注解276
11.1.2 實例41:用Cache進行緩存管理278
11.1.3 整合Ehcache281
11.1.4 整合Caffeine281
11.2 認識Redis282
11.2.1 對比Redis與Memcached282
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:操作有序集合Zset301
11.4.7 比較RedisTemplate和StringRedisTemplate306
11.5 實例47:用Redis和MyBatis完成緩存數據的增加、刪除、修改、查詢功能306
11.5.1 在Spring Boot中集成Redis306
11.5.2 配置Redis類307
11.5.3 創建測試實體類308
11.5.4 實現實體和數據表的映射關繫309
11.5.5 創建Redis緩存服務層309
11.5.6 完成增加、刪除、修改和查詢測試API310
11.6 實例48:用Redis和JPA實現緩存文章和點擊量311
11.6.1 實現緩存文章311
11.6.2 實現統計點擊量312
11.6.3 實現定時同步312
11.7 實例49:實現分布式Session313
11.7.1 用Redis實現Session共享313
11.7.2 配置Nginx實現負載均衡314
第12章 用RabbitMQ實現繫統間的數據交換316
12.1 認識RabbitMQ316
12.1.1 介紹RabbitMQ316
12.1.2 使用場景317
12.1.3 特性318
12.2 RabbitMQ的基本概念318
12.2.1 生產者、消費者和代理318
12.2.2 消息隊列319
12.2.3 交換機(Exchange)319
12.2.4 綁定320
12.2.5 通道321
12.2.6 消息確認321
12.3 RabbitMQ的六種工作模式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中集成RabbitMQ325
12.5.1 安裝RabbitMQ325
12.5.2 界面化管理RabbitMQ326
12.5.3 在Spring Boot中配置RabbitMQ327
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 認識Elasticsearch343
13.1.4 Elasticsearch應用案例343
13.1.5 對比Elasticsearch與MySQL343
13.1.6 認識ElasticSearchRepository344
13.1.7 認識ElasticsearchTemplate345
13.1.8 認識注解@Document345
13.1.9 管理索引347
13.2 實例55:用ELK管理Spring Boot應用程序的日志348
13.2.1 安裝Elasticsearch348
13.2.2 安裝Logstash349
13.2.3 安裝Kibana350
13.2.4 配置Spring Boot項目350
13.2.5 創建日志計劃任務351
13.2.6 用Kibana查看管理日志352
13.3 實例56:在Spring Boot中實現增加、刪除、修改、查詢 文檔的功能353
13.3.1 集成Elasticsearch353
13.3.2 創建實體353
13.3.3 創建增加、刪除、修改和查詢API355
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 了解Solr367
13.6.2 安裝配置Solr367
13.6.3 整合Spring Boot和Solr368
13.7 實例58:在Solr中實現數據的增加、刪除、修改和查詢369
13.7.1 創建User類369
13.7.2 測試增加、刪除、修改和查詢功能369
13.8 對比Elasticsearch和Solr372
項目實戰篇
第14章 實例59:開發企業級通用的後臺繫統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中集成Actuator387
14.3.2 在Spring Boot中集成Spring Boot admin應用監控390
14.3.3 在Spring Boot中集成Druid連接池監控392
第15章 實例60:實現一個類似“京東”的電子商務商城394
15.1 用Spring Security實現會員繫統394
15.1.1 實現會員實體394
15.1.2 實現會員接口395
15.1.3 實現用戶名、郵箱、手機號多方式注冊功能396
15.1.4 實現用MQ發送會員注冊驗證郵件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
本書針對Spring Boot 2.0以上版本,采用“知識點+實例”的形式編寫。通過“58個基於知識的實例+2個綜合性的項目”,深入地講解Spring Boot的技術原理、知識點和具體應用。把晦澀難懂的理論用實例展現出來,使得讀者對知識的理解變得非常容易,同時也立即學會如何使用它。要成為一本有溫度的書,隻做到上面這些還遠遠不夠。所以,本書花費大量的力氣對比講解多種同類技術的知識、使用和區別,讀者可以根據自己的喜歡進行技術選型;還講解了時下流行的接口架構風格RESTFUL、用來實現高並發的Redis、用來實現繫統間通信的中間件Rabbit MQ。最後兩章融合了本書所講知識點,講解了兩個常用又實用的實戰項目。本書適合所有對Spring Boot感興趣的讀者閱讀。