第1章 Spring Boot來臨 1
1.1 Spring的歷史 1
1.2 注解還是XML 2
1.3 Spring Boot的優(yōu)點 3
1.4 傳統(tǒng)Spring MVC和Spring Boot的對比 4
第 2章 聊聊開發(fā)環(huán)境搭建和基本開發(fā) 10
2.1 搭建Spring Boot開發(fā)環(huán)境 10
2.1.1 搭建Eclipse開發(fā)環(huán)境 10
2.1.2 搭建IntelliJ IDEA開發(fā)環(huán)境 13
2.2 Spring Boot的依賴和自動配置 15
2.3 使用自定義配置 19
2.4 開發(fā)自己的Spring Boot項目 21
第3章 全注解下的Spring IoC 23
3.1 IoC容器簡介 23
3.2 裝配你的Bean 27
3.2.1 通過掃描裝配你的Bean 27
3.2.2 自定義第三方Bean 31
3.3 依賴注入 32
3.3.1 注解@Autowired 34
3.3.2 消除歧義性——@Primary和@Quelifier 35
3.3.3 帶有參數(shù)的構造方法類的裝配 36
3.4 生命周期 37
3.5 使用屬性文件 42
3.6 條件裝配Bean 45
3.7 Bean的作用域 46
3.8 使用@Profile 48
3.9 引入XML配置Bean 50
3.10 使用Spring EL 51
第4章 開始約定編程——Spring AOP 53
4.1 約定編程 53
4.1.1 約定 53
4.1.2 ProxyBean的實現(xiàn) 57
4.1.3 總結 60
4.2 AOP的概念 61
4.2.1 為什么使用AOP 61
4.2.2 AOP 術語和流程 64
4.3 AOP開發(fā)詳解 65
4.3.1 確定連接點 65
4.3.2 開發(fā)切面 66
4.3.3 切點定義 67
4.3.4 測試AOP 68
4.3.5 環(huán)繞通知 71
4.3.6 引入 72
4.3.7 通知獲取參數(shù) 74
4.3.8 織入 75
4.4 多個切面 77
第5章 訪問數(shù)據(jù)庫 82
5.1 配置數(shù)據(jù)源 83
5.1.1 啟動默認數(shù)據(jù)源 83
5.1.2 配置自定義數(shù)據(jù)源 83
5.2 使用JdbcTemplate操作數(shù)據(jù)庫 86
5.3 使用JPA(Hibernate)操作數(shù)據(jù) 90
5.3.1 概述 90
5.3.2 開發(fā)JPA 90
5.4 整合MyBatis框架 96
5.4.1 MyBatis簡介 96
5.4.2 MyBatis的配置 97
5.4.3 Spring Boot整合MyBatis 101
5.4.4 MyBatis的其他配置 104
第6章 聊聊數(shù)據(jù)庫事務處理 107
6.1 JDBC的數(shù)據(jù)庫事務 108
6.2 Spring聲明式事務的使用 110
6.2.1 Spring聲明式數(shù)據(jù)庫事務約定 110
6.2.2 @Transactional的配置項 111
6.2.3 Spring事務管理器 113
6.2.4 測試數(shù)據(jù)庫事務 114
6.3 隔離級別 118
6.3.1 數(shù)據(jù)庫事務的知識 118
6.3.2 詳解隔離級別 120
6.4 傳播行為 124
6.4.1 傳播行為的定義 125
6.4.2 測試傳播行為 126
6.5 @Transactional自調用失效問題 130
第7章 使用性能利器——Redis 134
7.1 spring-data-redis項目簡介 135
7.1.1 spring-data-redis項目的設計 135
7.1.2 RedisTemplate 137
7.1.3 Spring對Redis數(shù)據(jù)類型操作的封裝 139
7.1.4 SessionCallback和RedisCallback接口 141
7.2 在Spring Boot中配置和使用Redis 142
7.2.1 在Spring Boot中配置Redis 142
7.2.2 操作Redis數(shù)據(jù)類型 143
7.3 Redis的一些特殊用法 148
7.3.1 使用Redis事務 148
7.3.2 使用Redis流水線 149
7.3.3 使用Redis發(fā)布訂閱 150
7.3.4 使用Lua腳本 153
7.4 使用Spring緩存注解操作Redis 156
7.4.1 緩存管理器和緩存的啟用 156
7.4.2 開發(fā)緩存注解 157
7.4.3 測試緩存注解 163
7.4.4 緩存注解自調用失效問題 165
7.4.5 緩存臟數(shù)據(jù)說明 165
7.4.6 自定義緩存管理器 166
第8章 文檔數(shù)據(jù)庫——MongoDB 168
8.1 配置MongoDB 169
8.2 使用MongoTemplate實例 170
8.2.1 搭建開發(fā)環(huán)境 170
8.2.2 使用MongoTemplate操作文檔 173
8.3 使用JPA 178
8.3.1 基本用法 178
8.3.2 使用自定義查詢 180
第9章 初識Spring MVC 183
9.1 Spring MVC框架的設計 183
9.2 Spring MVC流程 184
9.3 定制Spring MVC的初始化 191
9.4 Spring MVC實例 192
9.4.1 開發(fā)控制器 193
9.4.2 視圖和視圖渲染 194
第 10章 深入Spring MVC開發(fā) 197
10.1 處理器映射 197
10.2 獲取控制器參數(shù) 198
10.2.1 在無注解下獲取參數(shù) 199
10.2.2 使用@RequestParam獲取參數(shù) 199
10.2.3 傳遞數(shù)組 200
10.2.4 傳遞JSON 200
10.2.5 通過URL傳遞參數(shù) 203
10.2.6 獲取格式化參數(shù) 204
10.3 自定義參數(shù)轉換規(guī)則 205
10.3.1 處理器獲取參數(shù)邏輯 205
10.3.2 一對一轉換器(Converter) 208
10.3.3 GenericConverter集合和數(shù)組轉換 210
10.4 數(shù)據(jù)驗證 211
10.4.1 JSR-303 驗證 211
10.4.2 參數(shù)驗證機制 214
10.5 數(shù)據(jù)模型 217
10.6 視圖和視圖解析器 219
10.6.1 視圖設計 219
10.6.2 視圖實例——導出PDF文件 220
10.7 文件上傳 224
10.7.1 Spring MVC對文件上傳的支持 224
10.7.2 開發(fā)文件上傳功能 226
10.8 攔截器 228
10.8.1 攔截器的設計 228
10.8.2 開發(fā)攔截器 229
10.8.3 多個攔截器的順序 231
10.9 國際化 234
10.9.1 國際化消息源 234
10.9.2 國際化解析器 235
10.9.3 國際化實例——SessionLocaleResolver 237
10.10 Spring MVC拾遺 240
10.10.1 @ResponseBody轉換為JSON的秘密 240
10.10.2 重定向 241
10.10.3 操作會話對象 243
10.10.4 給控制器增加通知 245
10.10.5 獲取請求頭參數(shù) 247
第 11章 構建REST風格網站 249
11.1 REST簡述 249
11.1.1 REST名詞解釋 249
11.1.2 HTTP的動作 250
11.1.3 REST風格的一些誤區(qū) 251
11.2 使用Spring MVC開發(fā)REST風格端點 251
11.2.1 Spring MVC整合REST 252
11.2.2 使用Spring開發(fā)REST風格的端點 252
11.2.3 使用@RestController 260
11.2.4 渲染結果 261
11.2.5 處理HTTP狀態(tài)碼、異常和響應頭 262
11.3 客戶端請求RestTemplate 266
11.3.1 使用RestTemplate請求后端 267
11.3.2 獲取響應頭、狀態(tài)碼和資源交換 269
第 12章 安全——Spring Security 271
12.1 概述和簡單安全認證 271
12.2 使用WebSecurityConfigurerAdapter自定義 273
12.3 自定義用戶服務信息 274
12.3.1 使用內存簽名服務 275
12.3.2 使用數(shù)據(jù)庫定義用戶認證服務 276
12.3.3 使用自定義用戶認證服務 279
12.4 限制請求 281
12.4.1 配置請求路徑訪問權限 282
12.4.2 使用Spring表達式配置訪問權限 283
12.4.3 強制使用HTTPS 285
12.4.4 防止跨站點請求偽造 285
12.5 用戶認證功能 287
12.5.1 自定義登錄頁面 287
12.5.2 啟用HTTP Basic認證 288
12.5.3 登出 289
第 13章 學點Spring其他的技術 291
13.1 異步線程池 291
13.1.1 定義線程池和開啟異步可用 292
13.1.2 異步實例 292
13.2 異步消息 294
13.2.1 JMS實例——ActiveMQ 295
13.2.2 使用AMQP——RabbitMQ 299
13.3 定時任務 303
13.4 WebSocket 應用 306
13.4.1 開發(fā)簡易的WebSocket服務 306
13.4.2 使用STOMP 311
第 14章 Spring 5新框架——WebFlux 319
14.1 基礎概念 319
14.1.1 響應式編程的宣言 320
14.1.2 Reactor模型 320
14.1.3 Spring WebFlux的概述 322
14.1.4 WebHandler接口和運行流程 323
14.2 通過Spring MVC方式開發(fā)WebFlux服務端 325
14.2.1 開發(fā)持久層 325
14.2.2 開發(fā)服務層 327
14.2.3 開發(fā)控制層 328
14.2.4 配置服務 330
14.2.5 客戶端開發(fā)——WebClient 331
14.3 深入WebFlux服務端開發(fā) 335
14.3.1 類型轉換器——Converter 335
14.3.2 驗證器——Validator 337
14.3.3 訪問靜態(tài)資源 338
14.4 深入客戶端開發(fā) 339
14.4.1 處理服務端錯誤和轉換 339
14.4.2 設置請求頭 341
14.5 使用路由函數(shù)方式開發(fā)WebFlux 342
14.5.1 開發(fā)處理器 342
14.5.2 開發(fā)請求路由 346
14.5.3 使用過濾器 347
第 15章 實踐一下——搶購商品 349
15.1 設計與開發(fā) 349
15.1.1 數(shù)據(jù)庫表設計 349
15.1.2 使用MyBatis開發(fā)持久層 350
15.1.3 使用Spring開發(fā)業(yè)務層和控制層 353
15.1.4 測試和配置 355
15.2 高并發(fā)開發(fā) 357
15.2.1 超發(fā)現(xiàn)象 357
15.2.2 悲觀鎖 358
15.2.3 樂觀鎖 359
15.2.4 使用Redis處理高并發(fā) 365
第 16章 部署、測試和監(jiān)控 371
16.1 部署和運行 371
16.1.1 打包 371
16.1.2 運行項目 373
16.1.3 熱部署 375
16.2 測試 376
16.2.1 構建測試類 376
16.2.2 使用隨機端口和REST風格測試 377
16.2.3 Mock測試 378
16.3 Actuator監(jiān)控端點 379
16.4 HTTP監(jiān)控 381
16.4.1 查看敏感信息 382
16.4.2 shutdown端點 383
16.4.3 配置端點 385
16.4.4 自定義端點 387
16.4.5 健康指標項 389
16.5 JMX監(jiān)控 392
第 17章 分布式開發(fā)——Spring Cloud 393
17.1 服務治理和服務發(fā)現(xiàn)——Eureka 395
17.1.1 配置服務治理節(jié)點 395
17.1.2 服務發(fā)現(xiàn) 397
17.1.3 配置多個服務治理中心節(jié)點 401
17.2 微服務之間的調用 403
17.2.1 Ribbon客戶端負載均衡 403
17.2.2 Feign聲明式調用 406
17.3 斷路器——Hystrix 409
17.3.1 使用降級服務 410
17.3.2 啟用Hystrix儀表盤 412
17.4 路由網關——Zuul 415
17.4.1 構建Zuul網關 415
17.4.2 使用過濾器 418
17.5 使用@SpringCloudApplication 421
附錄 Spring Boot知識點補充 423