Spring框架是Java EE開發(fā)的強(qiáng)有力的工具和事實(shí)標(biāo)準(zhǔn),而Spring Boot采用“約定優(yōu)于配置”的原則簡(jiǎn)化 Spring的開發(fā),成為業(yè)界流行的微服務(wù)開發(fā)框架,被越來(lái)越多的企業(yè)采用。為了適應(yīng)新潮流,本書對(duì)Spring Boot 3.x技術(shù)進(jìn)行深入講解。
本書從一個(gè)簡(jiǎn)單的項(xiàng)目開始講解Spring Boot企業(yè)級(jí)開發(fā),其內(nèi)容包含全注解下的Spring IoC和Spring AOP、數(shù)據(jù)庫(kù)編程(JPA、MyBatis和JDBC)、數(shù)據(jù)庫(kù)事務(wù)、NoSQL數(shù)據(jù)庫(kù)(Redis和MongoDB)技術(shù)、Spring MVC、REST風(fēng)格、互聯(lián)網(wǎng)搶購(gòu)業(yè)務(wù)、監(jiān)控與容器部署、Spring Cloud Alibaba微服務(wù)開發(fā)等。
本書內(nèi)容緊扣互聯(lián)網(wǎng)企業(yè)的實(shí)際需求,從全注解下的Spring知識(shí)講到Spring Boot的企業(yè)級(jí)開發(fā),對(duì)于Java開發(fā)人員,尤其是初學(xué)Spring Boot的人員和需要從傳統(tǒng)Spring轉(zhuǎn)向Spring Boot開發(fā)的技術(shù)人員,具有很高的參考價(jià)值。
·《深入淺出Spring Boot 2.x》時(shí)隔5年的全面更新;
·來(lái)自一線開發(fā)人員的實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié),全方位講解Spring Boot 3.x企業(yè)級(jí)開發(fā)
·采用Java 8之后的新語(yǔ)法和新技術(shù),全面講解Spring Boot 3.x;
·從理論到實(shí)踐,全面介紹Spring Boot 3.x的原理和應(yīng)用;
·緊扣互聯(lián)網(wǎng)企業(yè)的實(shí)際需求,追上微服務(wù)和云服務(wù)的潮流。
楊開振,精通Java互聯(lián)網(wǎng)技術(shù),擁有十余年企業(yè)級(jí)應(yīng)用開發(fā)經(jīng)驗(yàn),著有熱銷書《深入淺出Spring Boot 2.x》《Spring Cloud微服務(wù)和分布式系統(tǒng)實(shí)踐》《對(duì)照Excel,零基礎(chǔ)學(xué)Python數(shù)據(jù)分析》《深入淺出MyBatis技術(shù)原理與實(shí)戰(zhàn)》和《Java EE互聯(lián)網(wǎng)輕量級(jí)框架整合開發(fā)——SSM框架(Spring MVC+Spring+MyBatis)和Redis實(shí)現(xiàn)》。
第1章 Spring Boot 3.x的來(lái)臨 1
1.1 Spring框架的歷史 1
1.2 Spring Boot的特點(diǎn) 3
1.3 Spring和Spring Boot的關(guān)系 4
1.4 開發(fā)Spring Boot項(xiàng)目 4
第2章 聊聊開發(fā)環(huán)境搭建和基本開發(fā) 8
2.1 搭建Spring Boot開發(fā)環(huán)境 8
2.1.1 搭建Eclipse開發(fā)環(huán)境 8
2.1.2 搭建IntelliJ IDEA開發(fā)環(huán)境 11
2.2 使用自定義配置 13
2.3 開發(fā)自己的Spring Boot項(xiàng)目 14
第3章 全注解下的Spring IoC 16
3.1 IoC容器簡(jiǎn)介 16
3.2 裝配你的Bean 20
3.2.1 通過(guò)掃描裝配你的Bean 20
3.2.2 自定義第三方Bean 25
3.3 依賴注入 26
3.3.1 注解@Autowired 27
3.3.2 消除歧義性—@Primary和@Qualifier 29
3.3.3 帶有參數(shù)的構(gòu)造方法類的裝配 29
3.4 生命周期 30
3.5 使用屬性文件 36
3.6 條件裝配Bean 39
3.7 Bean的作用域 40
3.8 使用注解@Profile 42
3.9 使用Sp EL 43
第4章 開始約定編程—Spring AOP 46
4.1 約定編程 46
4.1.1 約定 46
4.1.2 ProxyBean的實(shí)現(xiàn) 51
4.2 AOP的知識(shí) 54
4.2.1 為什么要使用AOP 54
4.2.2 AOP的術(shù)語(yǔ)和流程 57
4.3 AOP開發(fā)詳解 59
4.3.1 確定攔截目標(biāo) 59
4.3.2 開發(fā)切面 59
4.3.3 定義切點(diǎn) 60
4.3.4 測(cè)試AOP 62
4.3.5 環(huán)繞通知 64
4.3.6 引入 65
4.3.7 通知獲取參數(shù) 67
4.3.8 織入 68
4.4 多個(gè)切面 68
第5章 訪問(wèn)數(shù)據(jù)庫(kù) 73
5.1 配置數(shù)據(jù)源 74
5.1.1 配置默認(rèn)數(shù)據(jù)源 74
5.1.2 配置自定義數(shù)據(jù)源 74
5.2 使用JdbcTemplate操作數(shù)據(jù)庫(kù) 78
5.3 使用JPA(Hibernate)操作數(shù)據(jù)庫(kù) 81
5.3.1 概述 81
5.3.2 開發(fā)JPA 82
5.4 整合MyBatis框架 87
5.4.1 MyBatis簡(jiǎn)介 87
5.4.2 MyBatis的配置 88
5.4.3 Spring Boot整合MyBatis 92
5.4.4 MyBatis的其他配置 95
第6章 聊聊數(shù)據(jù)庫(kù)事務(wù)處理 97
6.1 JDBC的數(shù)據(jù)庫(kù)事務(wù) 98
6.2 Spring聲明式事務(wù)的使用 100
6.2.1 Spring聲明式事務(wù)約定 100
6.2.2 注解@Transactional的配置項(xiàng) 101
6.2.3 Spring事務(wù)管理器 103
6.2.4 測(cè)試數(shù)據(jù)庫(kù)事務(wù) 105
6.3 隔離級(jí)別 109
6.3.1 數(shù)據(jù)庫(kù)事務(wù)的要素 109
6.3.2 詳解隔離級(jí)別 110
6.4 傳播行為 114
6.4.1 傳播行為 115
6.4.2 測(cè)試傳播行為 116
6.4.3 事務(wù)狀態(tài) 121
6.5 Spring數(shù)據(jù)庫(kù)事務(wù)實(shí)戰(zhàn) 122
6.5.1 準(zhǔn)確啟用Spring數(shù)據(jù)庫(kù)事務(wù) 122
6.5.2 占用事務(wù)時(shí)間過(guò)長(zhǎng) 123
6.5.3 @Transactional自調(diào)用失效問(wèn)題 123
第7章 使用性能利器—Redis 128
7.1 spring-data-redis項(xiàng)目簡(jiǎn)介 129
7.1.1 spring-data-redis項(xiàng)目的設(shè)計(jì) 129
7.1.2 RedisTemplate和StringRedisTemplate 131
7.1.3 Spring對(duì)Redis數(shù)據(jù)類型操作的封裝 134
7.1.4 SessionCallback和RedisCallback接口 135
7.2 在Spring Boot中配置和操作Redis 136
7.2.1 在Spring Boot中配置Redis 136
7.2.2 操作Redis數(shù)據(jù)類型 137
7.3 Redis的一些特殊用法 141
7.3.1 使用Redis事務(wù) 141
7.3.2 使用Redis流水線 143
7.3.3 使用Redis發(fā)布/訂閱 144
7.3.4 使用Lua腳本 147
7.4 使用Spring緩存注解操作Redis 150
7.4.1 緩存管理器和緩存的啟用 150
7.4.2 開發(fā)緩存注解 151
7.4.3 測(cè)試緩存注解 156
7.4.4 緩存注解自調(diào)用失效問(wèn)題 158
7.4.5 緩存臟數(shù)據(jù)說(shuō)明 159
7.4.6 自定義緩存管理器 160
第8章 文檔數(shù)據(jù)庫(kù)—MongoDB 162
8.1 配置MongoDB 163
8.2 使用MongoTemplate實(shí)例 164
8.2.1 準(zhǔn)備MongoDB的文檔 164
8.2.2 使用MongoTemplate操作文檔 165
8.3 使用JPA 170
8.3.1 基本用法 170
8.3.2 使用自定義查詢 172
第9章 初識(shí)Spring MVC 175
9.1 Spring MVC框架的設(shè)計(jì) 176
9.2 Spring MVC流程 176
9.3 定制Spring MVC的初始化 182
9.4 Spring MVC實(shí)例 184
9.4.1 開發(fā)控制器 184
9.4.2 視圖和視圖渲染 185
第10章 深入Spring MVC開發(fā) 188
10.1 處理器映射 188
10.2 獲取控制器參數(shù) 189
10.2.1 在無(wú)注解的情況下獲取參數(shù) 190
10.2.2 使用@RequestParam獲取參數(shù) 190
10.2.3 傳遞數(shù)組 191
10.2.4 傳遞JSON數(shù)據(jù)集 191
10.2.5 通過(guò)URL傳遞參數(shù) 194
10.2.6 獲取格式化參數(shù) 195
10.3 自定義參數(shù)轉(zhuǎn)換規(guī)則 196
10.3.1 處理器轉(zhuǎn)換參數(shù)邏輯 197
10.3.2 一對(duì)一轉(zhuǎn)換器 200
10.3.3 GenericConverter集合和數(shù)組轉(zhuǎn)換 202
10.4 數(shù)據(jù)驗(yàn)證 202
10.4.1 JSR-303驗(yàn)證 202
10.4.2 參數(shù)驗(yàn)證機(jī)制 205
10.5 數(shù)據(jù)模型 208
10.6 視圖和視圖解析器 210
10.6.1 視圖設(shè)計(jì) 210
10.6.2 視圖實(shí)例—導(dǎo)出Excel文檔 212
10.7 文件上傳 214
10.7.1 文件上傳的配置項(xiàng) 214
10.7.2 開發(fā)文件上傳功能 215
10.8 攔截器 218
10.8.1 設(shè)計(jì)攔截器 218
10.8.2 開發(fā)攔截器 219
10.8.3 多個(gè)攔截器方法的運(yùn)行順序 221
10.9 國(guó)際化 224
10.9.1 國(guó)際化消息源 224
10.9.2 國(guó)際化解析器 225
10.9.3 國(guó)際化實(shí)例—SessionLocaleResolver 227
10.10 Spring MVC拾遺 230
10.10.1 @ResponseBody轉(zhuǎn)換為JSON的秘密 230
10.10.2 重定向 231
10.10.3 操作會(huì)話屬性 233
10.10.4 給控制器增加通知 235
10.10.5 獲取請(qǐng)求頭參數(shù) 237
第11章 構(gòu)建REST風(fēng)格網(wǎng)站 240
11.1 REST簡(jiǎn)述 240
11.1.1 REST名詞解釋 240
11.1.2 HTTP的動(dòng)作 241
11.1.3 REST風(fēng)格的一些誤區(qū) 242
11.2 使用Spring MVC開發(fā)REST風(fēng)格端點(diǎn) 242
11.2.1 Spring MVC整合REST 242
11.2.2 使用Spring開發(fā)REST風(fēng)格的端點(diǎn) 243
11.2.3 使用@RestController 251
11.2.4 渲染結(jié)果 252
11.2.5 處理HTTP狀態(tài)碼、響應(yīng)頭和異常 254
11.3 客戶端請(qǐng)求RestTemplate 257
11.3.1 使用RestTemplate請(qǐng)求后端 258
11.3.2 獲取狀態(tài)碼和響應(yīng)頭 261
11.3.3 定制請(qǐng)求體和響應(yīng)類型 262
第12章 安全—Spring Security 264
12.1 概述和簡(jiǎn)單安全驗(yàn)證 264
12.1.1 使用用戶密碼登錄系統(tǒng) 265
12.1.2 Spring Security的配置項(xiàng) 266
12.1.3 開發(fā)Spring Security的主要的類 266
12.2 使用UserDetailsService接口定制用戶信息 267
12.2.1 使用內(nèi)存保存用戶信息 267
12.2.2 從數(shù)據(jù)庫(kù)中讀取用戶信息 268
12.2.3 使用自定義UserDetailsService對(duì)象 270
12.2.4 密碼編碼器 270
12.3 限制請(qǐng)求 271
12.3.1 配置請(qǐng)求路徑訪問(wèn)權(quán)限 272
12.3.2 自定義驗(yàn)證方法 274
12.3.3 不攔截的請(qǐng)求 275
12.3.4 防止跨站點(diǎn)請(qǐng)求偽造 275
12.4 登錄和登出設(shè)置 277
12.4.1 自定義登錄頁(yè)面 277
12.4.2 啟用HTTP Basic驗(yàn)證 279
12.4.3 登出配置 279
第13章 學(xué)點(diǎn)Spring其他的技術(shù) 282
13.1 異步線程池 282
13.1.1 定義線程池和開啟異步可用 283
13.1.2 異步實(shí)例 284
13.2 異步消息—RabbitMQ 285
13.3 定時(shí)任務(wù) 289
第14章 實(shí)踐一下—搶購(gòu)商品 293
14.1 設(shè)計(jì)與開發(fā) 293
14.1.1 數(shù)據(jù)庫(kù)表設(shè)計(jì) 293
14.1.2 使用MyBatis開發(fā)持久層 294
14.1.3 使用Spring開發(fā)業(yè)務(wù)層和控制層 297
14.1.4 測(cè)試和配置 299
14.2 高并發(fā)開發(fā) 301
14.2.1 超發(fā)現(xiàn)象 301
14.2.2 悲觀鎖 303
14.2.3 樂(lè)觀鎖 304
第15章 打包、測(cè)試、監(jiān)控、預(yù)先編譯和容器部署 310
15.1 打包和運(yùn)行 310
15.1.1 打包項(xiàng)目 310
15.1.2 運(yùn)行項(xiàng)目 311
15.1.3 熱部署 314
15.2 測(cè)試 315
15.2.1 構(gòu)建測(cè)試類 316
15.2.2 使用隨機(jī)端口和REST風(fēng)格測(cè)試 317
15.2.3 Mock測(cè)試 317
15.3 Actuator監(jiān)控端點(diǎn) 319
15.4 HTTP監(jiān)控 320
15.4.1 查看敏感信息 321
15.4.2 shutdown端點(diǎn) 323
15.4.3 配置端點(diǎn) 324
15.4.4 自定義端點(diǎn) 326
15.4.5 健康指標(biāo)項(xiàng) 328
15.5 JMX監(jiān)控 331
15.6 預(yù)先編譯 332
15.6.1 搭建GraalVM環(huán)境 333
15.6.2 創(chuàng)建項(xiàng)目 335
15.6.3 生成和運(yùn)行原生文件 336
15.7 部署到Docker容器中 337
第16章 Spring Cloud Alibaba微服務(wù)開發(fā) 339
16.1 服務(wù)治理—Alibaba Nacos 342
16.1.1 下載、安裝、配置和啟動(dòng)Nacos 342
16.1.2 服務(wù)發(fā)現(xiàn) 343
16.1.3 搭建Nacos集群 350
16.2 服務(wù)調(diào)用 352
16.2.1 客戶端負(fù)載均衡 353
16.2.2 OpenFeign聲明式服務(wù)調(diào)用 356
16.3 容錯(cuò)機(jī)制—Spring Cloud Alibaba Sentinel 359
16.3.1 設(shè)置埋點(diǎn) 360
16.3.2 Sentinel控制臺(tái) 361
16.3.3 流控 363
16.3.4 熔斷 364
16.3.5 在OpenFeign中使用Sentinel 371
16.4 API網(wǎng)關(guān)—Spring Cloud Gateway 372
16.4.1 Gateway的工作原理 374
16.4.2 配置路由規(guī)則 375
16.4.3 過(guò)濾器 376
16.4.4 使用Sentinel管控Gateway 383
附錄 Spring Boot知識(shí)點(diǎn)補(bǔ)充 387
A.1 Java 8和之后版本的新語(yǔ)法 387
A.1.1 Lambda表達(dá)式 387
A.1.2 本地變量類型推斷 387
A.1.3 switch語(yǔ)句的改善 388
A.1.4 文本塊 388
A.1.5 緊湊聲明類的關(guān)鍵字record 389
A.1.6 instanceof語(yǔ)法的改善 390
A.2 選擇內(nèi)嵌服務(wù)器 391
A.3 修改商標(biāo) 391