深入淺出 Spring Boot 2.x
內容描述
Spring框架是Java EE開發的強有力的工具和事實標準,而Spring Boot採用“約定優於配置”的原則簡化了Spring的開發,從而成為業界流行的微服務開發框架,已經被越來越多的企業採用。2018年3月Spring Boot的版本正式從1.x升級到了2.x,為了適應新潮流,本書將對Spring Boot 2.x技術進行深入講解。
本書從一個最簡單的工程開始講解Spring Boot企業級開發,其內容包含全註解下的Spring IoC和AOP、數據庫編程(JDBC、JPA和MyBatis)、數據庫事務、NoSQL(Redis和MongoDB)技術、Spring MVC、Spring 5新一代響應式框架WebFlux、因特網搶購業務、部署與監控、REST風格和Spring Cloud分佈式開發等。
本書內容緊扣因特網企業的實際要求,從全註解下Spring知識講到Spring Boot的企業級開發,對於Java開發人員,尤其是初學Spring Boot的人員和需要從傳統Spring轉向Spring Boot開發的技術人員,具有很高的參考價值。
目錄大綱
第1章Spring Boot來臨1
1.1 Spring的歷史1
1.2註解還是XML 2
1.3 Spring Boot的優點3
1.4傳統Spring MVC和Spring Boot的對比4
第2章聊聊開發環境搭建和基本開發10
2.1搭建Spring Boot開發環境10
2.1.1搭建Eclipse開發環境10
2.1.2搭建IntelliJ IDEA開發環境13
2.2 Spring Boot的依賴和自動配置15
2.3使用自定義配置19
2.4開發自己的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帶有參數的構造方法類的裝配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的實現57
4.1 .3總結60
4.2 AOP的概念61
4.2.1為什麼使用AOP 61
4.2.2 AOP術語和流程64
4.3 AOP開發詳解65
4.3.1確定連接點65
4.3.2開發切面66
4.3.3切點定義67
4.3 .4測試AOP 68
4.3.5環繞通知71
4.3.6引入72
4.3.7通知獲取參數74
4.3.8織入75
4.4多個切面77
第5章訪問數據庫82
5.1配置數據源83
5.1.1啟動默認數據源83
5.1.2配置自定義數據源83
5.2使用JdbcTemplate操作數據庫86
5.3使用JPA(Hibernate)操作數據90
5.3.1概述90
5.3.2開發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章聊聊數據庫事務處理107
6.1 JDBC的數據庫事務108
6.2 Spring聲明式事務的使用110
6.2.1 Spring聲明式數據庫事務約定110
6.2.2 @Transactional的配置項111
6.2.3 Spring事務管理器113
6.2.4測試數據庫事務114
6.3隔離級別118
6.3.1數據庫事務的知識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數據類型操作的封裝139
7.1.4 SessionCallback和RedisCallback接口141
7.2在Spring Boot中配置和使用Redis 142
7.2.1在Spring Boot中配置Redis 142
7.2.2操作Redis數據類型143
7.3 Redis的一些特殊用法148
7.3.1使用Redis事務148
7.3.2使用Redis流水線149
7.3.3使用Redis發布訂閱150
7.3.4使用Lua腳本153
7.4使用Spring緩存註解操作Redis 156
7.4.1緩存管理器和緩存的啟用156
7.4.2開發緩存註解157
7.4. 3測試緩存註解163
7.4.4緩存註解自調用失效問題165
7.4.5緩存臟數據說明165
7.4.6自定義緩存管理器166
第8章文檔數據庫——MongoDB 168
8.1配置MongoDB 169
8.2使用MongoTemplate實例170
8.2.1搭建開發環境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開發控制器193
9.4.2視圖和視圖渲染194
第10章深入Spring MVC開發197
10.1處理器映射197
10.2獲取控制器參數198
10.2.1在無註解下獲取參數199
10.2.2使用@RequestParam獲取參數199
10.2.3傳遞數組200
10.2.4傳遞JSON 200
10.2.5通過URL傳遞參數203
10.2.6獲取格式化參數204
10.3自定義參數轉換規則205
10.3.1處理器獲取參數邏輯205
10.3.2一對一轉換器(Converter) 208
10.3.3 GenericConverter集合和數組轉換210
10.4數據驗證211
10.4.1 JSR -303驗證211
10.4.2參數驗證機制214
10.5數據模型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開發文件上傳功能226
10.8攔截器228
10.8.1攔截器的設計228
10.8.2開發攔截器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獲取請求頭參數247
第11章構建REST風格網站249
11.1 REST簡述249
11.1.1 REST名詞解釋249
11.1. 2 HTTP的動作250
11.1.3 REST風格的一些誤區251
11.2使用Spring MVC開發REST風格端點251
11.2.1 Spring MVC整合REST 252
11.2.2使用Spring開發REST風格的端點252
11.2.3使用@RestController 260
11.2.4渲染結果261
11.2.5處理HTTP狀態碼、異常和響應頭262
11.3客戶端請求RestTemplate 266
11.3.1使用RestTemplate請求後端267
11.3.2獲取響應頭、狀態碼和資源交換269
第12章安全——Spring Security 271
12.1概述和簡單安全認證271
12.2使用WebSecurityConfigurerAdapter自定義273
12.3自定義用戶服務信息274
12.3.1使用內存簽名服務275
12.3.2使用數據庫定義用戶認證服務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開發簡易的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方式開發WebFlux服務端325
14.2.1開發持久層325
14.2.2開發服務層327
14.2.3開發控制層328
14.2.4配置服務330
14.2.5客戶端開發——WebClient 331
14.3深入WebFlux服務端開發335
14.3.1類型轉換器——Converter 335
14.3.2驗證器——Validator 337
14.3.3訪問靜態資源338
14.4深入客戶端開發339
14.4.1處理服務端錯誤和轉換339
14.4.2設置請求頭341
14.5使用路由函數方式開發WebFlux 342
14.5.1開發處理器342
14.5.2開發請求路由346
14.5.3使用過濾器347
第15章實踐一下——搶購商品349
15.1設計與開發349
15.1.1數據庫表設計349
15.1.2使用MyBatis開發持久層350
15.1.3使用Spring開發業務層和控制層353
15.1.4測試和配置355
15.2高並發開發357
15.2.1超發現象357
15.2.2悲觀鎖358
15.2.3樂觀鎖359
15.2.4使用Redis處理高並發365
第16章部署、測試和監控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監控端點379
16.4 HTTP監控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監控392
第17章分佈式開發——Spring Cloud 393
17.1服務治理和服務發現——Eureka 395
17.1.1配置服務治理節點395
17.1.2服務發現397
17.1.3配置多個服務治理中心節點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
作者介紹
楊開振,精通Java 互聯網技術開發和實踐,擁有十餘年一線企業開發經驗,著有業內暢銷書《深入淺出MyBatis 技術原理與實戰》和《Java EE 互聯網輕量級框架整合開發——SSM 框架(Spring MVC +Spring+MyBatis) 和Redis 實現》,目前成為自由職業人,在淘寶教育平台上從事Java EE 互聯網相關的在線培訓工作。