輕量級 Java EE 企業應用開發實戰

柳偉衛

  • 出版商: 清華大學
  • 出版日期: 2021-04-01
  • 定價: $834
  • 售價: 8.5$709
  • 語言: 簡體中文
  • 頁數: 589
  • 裝訂: 平裝
  • ISBN: 7302575681
  • ISBN-13: 9787302575689
  • 相關分類: Java 程式語言
  • 立即出貨 (庫存 < 3)

  • 輕量級 Java EE 企業應用開發實戰-preview-1
  • 輕量級 Java EE 企業應用開發實戰-preview-2
  • 輕量級 Java EE 企業應用開發實戰-preview-3
輕量級 Java EE 企業應用開發實戰-preview-1

買這商品的人也買了...

商品描述

本書由資深Java工程師結合多年大廠開發經驗精心編撰,全面系統地介紹Java EE企業級開發所需要的輕量級開源技術棧,涉及Maven、Servlet、Jetty、Tomcat、Spring框架、Spring Web MVC、Spring Security、MyBatis、MySQL、Thymeleaf、Bootstrap、REST客戶端、Jersey、WebSocket、JMS、Email、任務執行與調度、緩存、Spring Boot、Spring Cloud等方面的內容。“輕量級”開發模式已經深入人心,被廣大互聯網公司所採用,本書從開發環境搭建開始,循序漸進地講解核心技術、熱點框架,適時結合項目與案例介紹這些技術與框架的實際應用,特別是對當前熱點的微服務開發技術進行了詳細的闡述,對於擁有Java基礎,想開發企業項目的讀者,本書可幫助你快速上手。 本書技術先進,案例豐富,主要面向對Java EE企業級開發感興趣的電腦專業學生、軟件工程師、系統架構師等,也可以用作軟件學院或培訓機構的教學用書。

作者簡介

柳偉衛,網名waylau、老衛,80後程序員,從業十餘年,關注編程、系統架構、性能優化:CSDN、開源中國、雲棲社區等技術社區專家,慕課網特邀講師;在IT公司擔任過項目經理、架構師、高級技術顧問等職位,具有豐富的軟件開發管理及系統架構經驗;主導過多個***、省級大型分佈式系統設計與研發,參與過面向全球的供應鏈系統服務化改造,積累了大量的分佈式系統、微服務架構經驗;已出版《分佈式系統常用技術及案例分析》《Spring Boot企業級應用開發實戰》《Spring Cloud微服務架構開發實戰》《 Spring 5開發大全》等著作。

目錄大綱

第1章  Java EE概述 1
1.1  Java EE發展簡史 1
1.1.1  Java平臺發展簡史 1
1.1.2  Java EE現狀 3
1.2  傳統企業級應用技術的不足 6
1.2.1  規範太重 6
1.2.2  學習成本太高 7
1.2.3  不夠靈活 7
1.2.4  發展緩慢 7
1.3  輕量級Java EE的技術特點 8
1.3.1  輕量級架構 8
1.3.2  符合二八定律 8
1.3.3  基於開源技術 8
1.3.4  支持微服務 9
1.3.5  可用性和擴展性 9
1.3.6  支撐大型互聯網應用 10
1.4  開發環境搭建 10
1.4.1  安裝JDK 10
1.4.2  Maven安裝 12
1.4.3  安裝Eclipse 13
1.4.4  安裝IntelliJ IDEA 16
1.4.5  安裝Apache Tomcat 17
1.5  總結 18
1.6  習題 19

第2章  項目管理——Maven 20
2.1  Maven概述 20
2.1.1  Maven的主要功能 20
2.1.2  創建Maven項目 21
2.1.3  探索Maven項目 23
2.1.4  構建Maven項目 26
2.2  理解Maven構建生命周期 28
2.2.1  Maven階段 28
2.2.2  完整的生命周期階段 29
2.2.3  生命周期階段在命令行中的調用 30
2.2.4  使用構建生命周期來設置項目 30
2.3  理解POM 32
2.3.1  Super POM 32
2.3.2  最小化POM 35
2.4  實戰:使用Eclipse創建Maven應用 36
2.4.1  創建Maven應用 36
2.4.2  運行Maven應用 38
2.4.3  導入Maven應用 40
2.4.4  相關問題解決 42
2.5  實戰:使用IntelliJ IEDA創建Maven應用 43
2.5.1  創建Maven應用 43
2.5.2  運行Maven應用 45
2.5.3  導入Maven應用 47
2.5.4  相關問題解決 48
2.6  總結 48
2.7  習題 49

第3章  Web應用的基石——Servlet 50
3.1  Servlet概述 50
3.1.1  Servlet架構 50
3.1.2  Servlet生命周期 51
3.1.3  常用方法 53
3.2  Servlet容器 53
3.2.1  常用Servlet容器 54
3.2.2  Tomcat和Jetty的相同點 54
3.2.3  Tomcat和Jetty的不同點 54
3.2.4  總結 55
3.3  過濾器 55
3.3.1  什麽是過濾器 55
3.3.2  過濾器生命周期 56
3.3.3  包裝請求和響應 57
3.3.4  過濾器環境 57
3.3.5  Web應用中過濾器的配置 57
3.3.6  過濾器和請求分派器 58
3.4  請求 60
3.4.1  HTTP協議參數 60
3.4.2  屬性 61
3.4.3  請求頭 61
3.4.4  請求路徑元素 61
3.4.5  路徑轉換方法 62
3.4.6  請求數據編碼 62
3.5  Servlet上下文 63
3.5.1  ServletContext接口作用域 63
3.5.2  初始化參數 63
3.5.3  配置方法 64
3.5.4  上下文屬性 66
3.5.5  資源 66
3.6  響應 67
3.6.1  緩沖 67
3.6.2  頭 68
3.6.3  方法 68
3.7  監聽器 69
3.7.1  事件類型和監聽器接口 69
3.7.2  部署描述符示例 70
3.7.3  監聽器實例和線程 71
3.7.4  監聽器異常 71
3.7.5  分佈式容器 71
3.7.6  會話事件 71
3.8  會話 71
3.8.1  會話跟蹤機制 72
3.8.2  創建會話 72
3.8.3  會話範圍 73
3.8.4  綁定屬性到會話 73
3.8.5  會話超時 73
3.8.6  最後訪問時間 74
3.8.7  線程問題 74
3.8.8  分佈式環境 74
3.8.9  客戶端語義 75
3.9  實戰:創建基於Servlet的Web應用 75
3.9.1  創建動態Web項目 75
3.9.2  創建Servlet實現類 75
3.9.3  編譯應用 77
3.9.4  運行應用 77
3.10  Tomcat服務器概述 77
3.10.1  Tomcat目錄結構 77
3.10.2  Tomcat主要組件 78
3.10.3  Tomcat處理HTTP請求的過程 79
3.11  實戰:在應用裡面內嵌Tomcat容器 80
3.11.1  安裝tomcat7-maven-plugin 80
3.11.2  運行應用 80
3.11.3  訪問應用 81
3.12  Jetty服務器概述 81
3.12.1  高性能Servlet容器 81
3.12.2  可拔插 82
3.12.3  Jetty常用配置 82
3.13  實戰:在應用裡面內嵌Jetty容器 86
3.13.1  Maven插件形式 86
3.13.2  編程方式 87
3.14  總結 90
3.15  習題 90

第4章  流行的開源關系型數據庫——MySQL 91
4.1  MySQL概述 91
4.1.1  MySQL名字的由來 91
4.1.2  MySQL的發展歷程 92
4.1.3  MySQL的特點 93
4.2  MySQL的安裝 94
4.2.1  下載安裝包 94
4.2.2  解壓安裝包 94
4.2.3  創建my.ini 95
4.2.4  初始化安裝 95
4.2.5  啟動和關閉MySQL Server 95
4.3  使用MySQL客戶端 96
4.4  MySQL基本操作 96
4.5  總結 97
4.6  習題 98

第5章  Java操作數據庫——JDBC 99
5.1  JDBC概述 99
5.2  JDBC的核心概念 99
5.2.1  建立連接 100
5.2.2  執行SQL並操作結果集 100
5.2.3  兩層模型 101
5.2.4  三層模型 102
5.2.5  JDBC與Java EE平臺的關系 103
5.3  使用PreparedStatement 103
5.3.1  創建PreparedStatement對象 103
5.3.2  為什麽使用PreparedStatement 104
5.4  事務管理 105
5.4.1  事務邊界和自動提交 105
5.4.2  關閉自動提交模式 105
5.4.3  事務隔離級別 106
5.4.4  性能考慮 107
5.4.5  保存點 107
5.5  實戰:使用JDBC操作數據庫 108
5.5.1  初始化數據庫 108
5.5.2  建表 108
5.5.3  初始化應用 108
5.5.4  創建測試類 110
5.6  理解連接池技術 114
5.7  實戰:使用數據庫連接池DBCP 114
5.7.1  添加DBCP依賴 114
5.7.2  編寫數據庫工具類 116
5.7.3  理解DbUtil的配置化 119
5.7.4  編寫測試用例 119
5.8  總結 122
5.9  習題 122

第6章  一站式應用框架——Spring 123
6.1  Spring概述 123
6.1.1  Spring的廣義與狹義 123
6.1.2  Spring框架總覽 125
6.1.3  Spring框架常用模塊 126
6.1.4  Spring設計模式 128
6.2  IoC 128
6.2.1  依賴註入與控制反轉 128
6.2.2  IoC容器和Bean 129
6.2.3  配置元數據 130
6.2.4  實例化容器 131
6.2.5  使用容器 131
6.2.6  Bean的命名 132
6.2.7  實例化bean的方式 132
6.2.8  註入方式 135
6.2.9  實戰:依賴註入的例子 137
6.2.10  依賴註入的詳細配置 140
6.2.11  使用depends-on 144
6.2.12  延遲加載bean 145
6.2.13  自動裝配 145
6.2.14  方法註入 147
6.2.15  bean scope 150
6.2.16  singleton bean與prototype bean 150
6.2.17  理解生命周期機制 151
6.2.18  基於註解的配置 152
6.2.19  基於註解的配置與基於XML的配置 157
6.3  AOP 157
6.3.1  AOP概述 158
6.3.2  AOP核心概念 158
6.3.3  Spring AOP 159
6.3.4  AOP代理 160
6.3.5  實戰:使用@AspectJ的例子 160
6.3.6  基於XML的AOP 163
6.3.7  實戰:基於XML的AOP的例子 164
6.4  資源處理 166
6.4.1  常用資源接口 166
6.4.2  內置資源接口實現 167
6.4.3  ResourceLoader 168
6.4.4  ResourceLoaderAware 168
6.4.5  資源作為依賴 169
6.5  表達式語言SpEL 169
6.5.1  表達式接口 170
6.5.2  對於bean定義的支持 171
6.5.3  實戰:使用SpEL的例子 172
6.6  總結 177
6.7  習題 178

第7章  Spring測試 179
7.1  測試概述 179
7.1.1  傳統的測試所面臨的問題 179
7.1.2  如何破解測試面臨的問題 180
7.1.3  測試類型 182
7.1.4  測試範圍及比例 183
7.2  Mock對象 184
7.2.1  Environment 184
7.2.2  JNDI 184
7.2.3  Servlet API 184
7.3  測試工具類 184
7.3.1  測試工具 185
7.3.2  測試Spring Web MVC 185
7.4  測試相關的註解 185
7.4.1  @BootstrapWith 185
7.4.2  @ContextConfiguration 185
7.4.3  @WebAppConfiguration 186
7.4.4  @ContextHierarchy 187
7.4.5  @ActiveProfiles 187
7.4.6  @TestPropertySource 188
7.4.7  @DirtiesContext 188
7.4.8  @TestExecutionListeners 190
7.4.9  @Commit 190
7.4.10  @Rollback 190
7.4.11  @BeforeTransaction 191
7.4.12  @AfterTransaction 191
7.4.13  @Sql 191
7.4.14  @SqlConfig 191
7.4.15  @SqlGroup 192
7.4.16  Spring JUnit 4註解 192
7.4.17  Spring JUnit Jupiter註解 193
7.5  Spring TestContext框架 195
7.5.1  Spring TestContext框架概述 195
7.5.2  核心抽象 195
7.5.3  引導TestContext 197
7.5.4  TestExecutionListener配置 197
7.5.5  上下文管理 197
7.5.6  測試夾具的註入 198
7.5.7  如何測試request bean和session bean 199
7.5.8  事務管理 201
7.5.9  執行SQL腳本 204
7.6  Spring MVC Test框架 206
7.6.1  服務端測試概述 207
7.6.2  選擇測試策略 208
7.6.3  設置測試功能 209
7.6.4  執行請求 209
7.6.5  定義期望 210
7.6.6  註冊過濾器 212
7.6.7  脫離容器的測試 212
7.6.8  實戰:服務端測試Spring Web MVC的例子 212
7.7  總結 216
7.8  習題 216

第8章  Spring事務管理 217
8.1  事務管理概述 217
8.1.1  Spring事務管理優勢 217
8.1.2  全局事務與本地事務 218
8.1.3  Spring事務模型 218
8.2  通過事務實現資源同步 220
8.2.1  高級別的同步方法 220
8.2.2  低級別的同步方法 220
8.2.3  TransactionAwareDataSourceProxy 221
8.3  聲明式事務管理 221
8.3.1  聲明式事務管理 222
8.3.2  實戰:聲明式事務管理的例子 222
8.3.3  事務回滾 227
8.3.4  配置不同的事務策略 229
8.3.5  @Transactional詳解 230
8.3.6  事務傳播機制 232
8.4  編程式事務管理 233
8.4.1  TransactionTemplate 234
8.4.2  PlatformTransactionManager 234
8.4.3  聲明式事務管理和編程式事務管理 235
8.5  總結 235
8.6  習題 235

第9章  MVC模式的典範——的典範LINK \l "_T 236
9.1  Spring Web MVC概述 236
9.2  DispatcherServlet 236
9.2.1  DispatcherServlet概述 237
9.2.2  上下文層次結構 238
9.2.3  處理流程 239
9.2.4  攔截 240
9.3  過濾器 240
9.3.1  HTTP PUT表單 241
9.3.2  轉發頭 241
9.3.3  ShallowEtagHeaderFilter 241
9.3.4  CORS 242
9.4  控制器 242
9.4.1  聲明控制器 242
9.4.2  請求映射 243
9.4.3  處理器方法 244
9.4.4  模型方法 247
9.4.5  綁定器方法 247
9.5  異常處理 247
9.5.1  @ExceptionHandler 248
9.5.2  框架異常處理 248
9.5.3  REST API異常 249
9.5.4  註解異常 249
9.5.5  容器錯誤頁面 249
9.6  CORS處理 250
9.6.1  @CrossOrigin 250
9.6.2  全局CORS配置 252
9.6.3  自定義 252
9.6.4  CORS過濾器 253
9.7  HTTP緩存 253
9.7.1  緩存控制 253
9.7.2  靜態資源 254
9.7.3  控制器緩存 254
9.8  MVC配置 255
9.8.1  啟用MVC配置 255
9.8.2  類型轉換 256
9.8.3  驗證 257
9.8.4  攔截器 257
9.8.5  內容類型 258
9.8.6  消息轉換器 259
9.8.7  視圖控制器 260
9.8.8  視圖解析器 260
9.8.9  靜態資源 261
9.8.10  DefaultServletHttpRequestHandler 261
9.8.11  路徑匹配 262
9.9  實戰:基於Spring Web MVC的JSON類型的處理 263
9.9.1  接口設計 263
9.9.2  系統配置 263
9.9.3  後台編碼實現 264
9.9.4  應用配置 265
9.9.5  運行應用 267
9.10  實戰:基於Spring Web MVC的 XML類型的處理 268
9.10.1  接口設計 268
9.10.2  系統配置 268
9.10.3  後台編碼實現 269
9.10.4  應用配置 270
9.10.5  運行應用 272
9.11  總結 273
9.12  習題 273

第10章  全能安全框架——Spring Security 274
10.1  基於角色的權限管理 274
10.1.1  角色的概念 274
10.1.2  基於角色的訪問控制 274
10.1.3  哪種方式更好 276
10.1.4  真實的案例 277
10.2  Spring Security概述 277
10.2.1  Spring Security的認證模型 277
10.2.2  Spring Security的安裝 279
10.2.3  模塊 280
10.2.4  Spring Security 5的新特性及高級功能 281
10.3  實戰:基於Spring Security安全認證 284
10.3.1  添加依賴 284
10.3.2  添加業務代碼 285
10.3.3  配置消息轉換器 286
10.3.4  配置Spring Security 287
10.3.5  創建應用配置類 288
10.3.6  創建內嵌Jetty的服務器 288
10.3.7  應用啟動器 289
10.3.8  運行應用 290
10.4  總結 291
10.5  習題 291

第11章  輕量級持久層框架——MyBatis 292
11.1  MyBatis概述 292
11.1.1  安裝MyBatis 292
11.1.2  MyBatis功能架構 293
11.1.3  MyBatis的優缺點 293
11.2  MyBatis四大核心組件 293
11.2.1  SqlSessionFactoryBuilder 294
11.2.2  SqlSessionFactory 295
11.2.3  SqlSession 295
11.2.4  Mapper 295
11.3  生命周期及作用域 296
11.3.1  SqlSessionFactoryBuilder 296
11.3.2  SqlSessionFactory 296
11.3.3  SqlSession 297
11.3.4  Mapper實例 297
11.4  總結 298
11.5  習題 298

第12章  MyBatis的高級應用 299
12.1  配置文件 299
12.1.1  properties 299
12.1.2  settings 301
12.1.3  typeAliases 304
12.1.4  typeHandlers 306
12.1.5  objectFactory 309
12.1.6  plugins 309
12.1.7  environments 310
12.1.8  transactionManager 311
12.1.9  dataSource 312
12.1.10  databaseIdProvider 314
12.1.11  mappers 315
12.2  Mapper映射文件 316
12.2.1  select 316
12.2.2  insert、update和delete 318
12.2.3  處理主鍵 320
12.2.4  sql 321
12.2.5  參數 322
12.2.6  結果映射 323
12.2.7  自動映射 325
12.2.8  緩存 326
12.3  動態SQL 328
12.3.1  if 328
12.3.2  choose、when和otherwise 329
12.3.3  trim、where和set 329
12.3.4  foreach 331
12.3.5  bind 331
12.3.6  多數據庫支持 331
12.4  常用API 332
12.4.1  SqlSessionFactoryBuilder 332
12.4.2  SqlSessionFactory 334
12.4.3  SqlSession 335
12.4.4  註解 337
12.5  常用插件 339
12.5.1  MyBatis Generator 339
12.5.2  PageHelper 341
12.6  實戰:使用MyBatis操作數據庫 344
12.6.1  初始化表結構 344
12.6.2  添加依賴 344
12.6.3  編寫業務代碼 345
12.6.4  編寫配置文件 347
12.6.5  編寫測試用例 348
12.6.6  運行測試用例 351
12.7  總結 353
12.8  習題 354

第13章  模板引擎——Thymeleaf 355
13.1  常用Java模板引擎 355
13.1.1  關於性能 355
13.1.2  為什麽選擇Thymeleaf而不是JSP 356
13.1.3  什麽是Thymeleaf 359
13.1.4  Thymeleaf處理模板 359
13.1.5  標準方言 360
13.2  Thymeleaf標準方言 361
13.2.1  Thymeleaf標準表達式語法 361
13.2.2  消息表達式 362
13.2.3  變量表達式 363
13.2.4  表達式基本對象 364
13.2.5  表達式工具對象 364
13.2.6  選擇表達式 365
13.2.7  鏈接表達式 366
13.2.8  分段表達式 366
13.2.9  字面量 367
13.2.10  算術運算 368
13.2.11  比較與相等 368
13.2.12  條件表達式 369
13.2.13  默認表達式 369
13.2.14  無操作標記 370
13.2.15  數據轉換及格式化 370
13.2.16  表達式預處理 370
13.3  Thymeleaf設置屬性值 370
13.3.1  設置任意屬性值 371
13.3.2  設置值到指定的屬性 371
13.3.3  同時設置多個值 372
13.3.4  附加和添加前綴 372
13.3.5  固定值布爾屬性 372
13.3.6  默認屬性處理器 373
13.3.7  支持對HTML 5友好的屬性及元素名稱 374
13.4  Thymeleaf迭代器與條件語句 374
13.4.1  迭代器 374
13.4.2  條件語句 377
13.5  Thymeleaf模板片段 378
13.5.1  定義和引用片段 378
13.5.2  Thymeleaf片段規範語法 379
13.5.3  不使用th:fragment 379
13.5.4  th:insert、th:replace和th:include三者的區別 379
13.6  Thymeleaf表達式基本對象 380
13.6.1  基本對象 380
13.6.2  Web上下文命名空間用於request/session屬性等 381
13.6.3  Web上下文對象 382
13.7  實戰:基於Thymeleaf的Web應用 382
13.7.1  添加依賴 382
13.7.2  編寫控制器 383
13.7.3  應用配置 384
13.7.4  編寫Thymeleaf模板 387
13.8  總結 388
13.9  習題 388

第14章  錦上添花——Bootstrap 389
14.1  Bootstrap概述 389
14.1.1  HTML 5 Doctype 390
14.1.2  響應式meta標簽 390
14.1.3  Box-Sizing 390
14.1.4  Normalize.css 390
14.1.5  模板 391
14.2  Bootstrap核心概念 391
14.2.1  Bootstrap的網格系統 392
14.2.2  媒體查詢 393
14.2.3  網格選項 394
14.2.4  移動設備及桌面設備 394
14.3  實戰:基於Bootstrap的Web應用 395
14.3.1  引入Bootstrap庫的樣式 395
14.3.2  引入Bootstrap庫的腳本 395
14.3.3  添加Bootstrap樣式類 396
14.3.4  運行應用 397
14.4  總結 398
14.5  習題 398

第15章  REST客戶端 399
15.1  RestTemplate 399
15.1.1  初始化 400
15.1.2  URI 400
15.1.3  請求頭 401
15.1.4  消息體 401
15.2  WebClient 402
15.2.1  retrieve()方法 402
15.2.2  exchange()方法 403
15.2.3  請求體 403
15.2.4  生成器選項 405
15.2.5  過濾器 406
15.3  實戰:基於RestTemplate的天氣預報服務 406
15.3.1  添加依賴 406
15.3.2  後台編碼實現 407
15.3.3  運行 412
15.4  實戰:基於WebClient的文件上傳和下載 414
15.4.1  添加依賴 414
15.4.2  文件上傳的編碼實現 414
15.4.3  文件下載的編碼實現 415
15.4.4  運行 416
15.5  總結 416
15.6  習題 417

第16章  REST服務框架——Jersey 418
16.1  REST概述 418
16.1.1  REST的基本概念 418
16.1.2  REST設計原則 419
16.1.3  成熟度模型 421
16.1.4  REST API管理 422
16.1.5  常用技術 425
16.2  實戰:基於Jersey的REST服務 426
16.2.1  創建一個新項目 426
16.2.2  探索項目 426
16.2.3  運行項目 431
16.3  JAX-RS核心概念 434
16.3.1  根資源類(Root Resource Classes) 434
16.3.2  參數註解(@*Param) 437
16.3.3  子資源 440
16.4  實戰:基於SSE構建實時Web應用 443
16.4.1  發布-訂閱模式 444
16.4.2  廣播模式 447
16.5  總結 450
16.6  習題 450

第17章  全雙工通信——WebSocket 451
17.1  WebSocket概述 451
17.1.1  HTTP與WebSocket對比 451
17.1.2  理解WebSocket的使用場景 452
17.2  WebSocket常用API 453
17.2.1  WebSocketHandler 453
17.2.2  WebSocket握手 454
17.2.3  部署 455
17.2.4  配置 456
17.2.5  跨域處理 458
17.3  SockJS 459
17.3.1  SockJS概述 459
17.3.2  啟用SockJS 460
17.3.3  心跳 461
17.3.4  客戶端斷開連接 461
17.3.5  CORS處理 461
17.3.6  SockJsClient 462
17.4  STOMP 463
17.4.1  STOMP概述 463
17.4.2  啟用STOMP 464
17.4.3  消息流程 466
17.4.4  處理器方法 468
17.4.5  發送消息 469
17.4.6  內嵌broker 470
17.4.7  外部broker 470
17.4.8  連接到broker 471
17.4.9  認證 471
17.4.10  用戶目的地 472
17.4.11  事件和攔截 472
17.4.12  STOMP客戶端 474
17.4.13  WebSocket Scope 474
17.4.14  性能優化 475
17.5  實戰:基於STOMP的聊天室 477
17.5.1  聊天室項目的概述 477
17.5.2  設置broker 478
17.5.3  服務端編碼 479
17.5.4  客戶端編碼 482
17.5.5  運行 486
17.6  總結 487
17.7  習題 487

第18章  消息通信——JMS 488
18.1  JMS概述 488
18.1.1  常用術語 488
18.1.2  使用場景 489
18.1.3  JMS規範優勢 489
18.1.4  常用技術 490
18.2  Spring JMS 490
18.2.1  JmsTemplate 490
18.2.2  連接管理 491
18.2.3  目的地管理 491
18.2.4  消息監聽器容器 492
18.2.5  事務管理 492
18.3  發送消息 493
18.3.1  使用消息轉換器 494
18.3.2  回調 494
18.4  接收消息 494
18.4.1  同步接收 494
18.4.2  異步接收 495
18.4.3  SessionAwareMessageListener 495
18.4.4  MessageListenerAdapter 496
18.4.5  處理事務 497
18.5  基於註解的監聽器 498
18.5.1  啟用基於註解的監聽器 498
18.5.2  編程式端點註冊 499
18.5.3  基於註解的端點方法簽名 499
18.5.4  響應管理 500
18.6  JMS命名空間 500
18.7  實戰:基於JMS的消息發送和接收 501
18.7.1  項目概述 501
18.7.2  配置 502
18.7.3  編碼實現 505
18.7.4  運行 510
18.8  總結 514
18.9  習題 514

第19章  消息通知——Email 515
19.1  Email概述 515
19.1.1  Email的起源 515
19.1.2  Spring框架對於Email的支持 516
19.2  實現發送Email 516
19.2.1  MailSender和SimpleMailMessage的基本用法 516
19.2.2  JavaMailSender和MimeMessagePreparator的用法 518
19.3  使用MimeMessageHelper 519
19.3.1  發送附件和內聯資源 519
19.3.2  使用模板創建Email內容 520
19.4  實戰:實現Email服務器 520
19.4.1  項目概述 520
19.4.2  Email服務器編碼實現 521
19.4.3  格式化Email內容 523
19.4.4  運行 524
19.5  總結 525
19.6  習題 525

第20章  任務執行與調度 526
20.1  任務執行與調度概述 526
20.2  TaskExecutor 526
20.2.1  TaskExecutor類型 527
20.2.2  使用TaskExecutor 527
20.3  TaskScheduler 528
20.3.1  Trigger接口 529
20.3.2  實現 529
20.4  任務調度及異步執行 530
20.4.1  啟用調度註解 530
20.4.2  @Scheduled 530
20.4.3  @Async 531
20.4.4  @Async的異常處理 532
20.4.5  命名空間 532
20.5  使用Quartz Scheduler 533
20.5.1  使用JobDetailFactoryBean 533
20.5.2  使用MethodInvokingJobDetailFactoryBean 534
20.6  實戰:基於Quartz Scheduler天氣預報系統 535
20.6.1  項目概述 535
20.6.2  後台編碼實現 536
20.6.3  運行 538
20.7  總結 539
20.8  習題 540

第21章  高性能之道——緩存 541
21.1  緩存概述 541
21.2  聲明式緩存註解 542
21.2.1  @Cacheable 542
21.2.2  @CachePut 543
21.2.3  @CacheEvict 543
21.2.4  @Caching 543
21.2.5  @CacheConfig 544
21.2.6  啟用緩存 544
21.2.7  使用自定義緩存 545
21.3  JCache 545
21.3.1  JCache註解概述 545
21.3.2  與Spring緩存註解的差異 546
21.4  基於XML的聲明式緩存 546
21.5  配置緩存存儲 547
21.5.1  基於JDK的緩存 547
21.5.2  基於Ehcache的緩存 547
21.5.3  基於Caffeine的緩存 548
21.5.4  基於GemFire的緩存 548
21.5.5  基於JSR-107的緩存 548
21.6  實戰:基於緩存的天氣預報系統 548
21.6.1  項目概述 549
21.6.2  後台編碼實現 549
21.6.3  緩存配置 550
21.6.4  運行 551
21.7  總結 551
21.8  習題 551

第22章  微服務基石——Spring Boot 552
22.1  從單塊架構到微服務架構 552
22.1.1  單塊架構的概念 552
22.1.2  單塊架構的優缺點 553
22.1.3  如何將單塊架構進化為微服務 554
22.2  微服務設計原則 555
22.2.1  拆分足夠微 555
22.2.2  輕量級通信 556
22.2.3  領域驅動原則 556
22.2.4  單一職責原則 556
22.2.5  DevOps及兩個比薩 557
22.2.6  不限於技術棧 557
22.2.7  可獨立部署 558
22.3  Spring Boot概述 558
22.3.1  Spring Boot產生的背景 559
22.3.2  Spring Boot的目標 560
22.3.3  Spring Boot與其他Spring應用的關系 560
22.3.4  Starter 561
22.4  實戰:開啟第一個Spring Boot項目 563
22.4.1  通過Spring Initializr初始化一個Spring Boot原型 563
22.4.2  用Maven編譯項目 565
22.4.3  探索項目 567
22.4.4  編寫REST服務 571
22.5  總結 572
22.6  習題 572

第23章  微服務治理框架——Spring Cloud 574
23.1  Spring Cloud概述 574
23.1.1  什麽是Spring Cloud 575
23.1.2  Spring Cloud與Spring Boot的關系 575
23.2  Spring Cloud入門配置 576
23.2.1  Maven配置 576
23.2.2  Gradle配置 577
23.2.3  聲明式方法 577
23.3  Spring Cloud子項目介紹 578
23.4  實戰:實現微服務的註冊與發現 580
23.4.1  服務發現的意義 580
23.4.2  如何集成Eureka Server 581
23.4.3  如何集成Eureka Client 584
23.4.4  實現服務的註冊與發現 588
23.5  總結 588
23.6  習題 589

附錄  本書所涉及的技術及相關版本 590
參考文獻 591