Spring5 核心原理與 30個類手寫實戰

譚勇德(Tom)

  • 出版商: 電子工業
  • 出版日期: 2019-07-01
  • 售價: $708
  • 貴賓價: 9.5$673
  • 語言: 簡體中文
  • ISBN: 7121367416
  • ISBN-13: 9787121367410
  • 相關分類: JVM 語言

立即出貨

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

商品描述

1996年,Java還只是一個新興的、初出茅廬的編程語言。2004年3月24日Spring正式對外發布1.0版本。我在2009年開始接觸Spring2.0版本,從此愛不釋手。Spring的出現,恰如其名開啟了全世界Java程序員的春天。如今,Spring已然成為一個生態,使用Spring簡直就是一種享受。本書將結合本人多年的Spring使用經驗,整理珍藏多年的學習筆記,採用類關系圖和代碼片段的形式,加以中文註釋,通俗、生動、全面深入地剖析了Spring源碼的重要細節。同時,本書也作為咕泡學院Java VIP高級課程的教案。要想練就"降龍十八掌”,先得修煉內功。本書用從設計模式開始講解,希望可以幫助大家更好地理解Spring,讓大家知其然,且知其所以然。

作者簡介

譚勇德(Tom)

10餘年Java開發經驗。

咕泡學院聯合創始人。

在大型IT公司擔任過CTO、系統架構師。

精通Java語言、JS、CSS、AS、PHP等;負責過多個大型分佈式系統的微服務架構的技術改造;多年以來對Spring框架有深入研究及獨特見解;開發過多套企業內部UI框架和ORM框架;熱衷於分享經驗,共同進步。

格言:不只做一個技術者,更要做一個思考者。

目錄大綱

第1篇Spring內功心法
第1章軟件架構設計原則2 
1.1開閉原則2 
1.2依賴倒置原則4 
1.3單一職責原則7 
1.4接口隔離原則10 
1.5迪米特原則12 
1.6里氏替換原則14 
1.7合成複用原則19 
1.8設計原則總結20 
第2章Spring中常用的設計模式21 
2.1為什麼要從設計模式開始21 
2.1.1寫出優雅的代碼22 
2.1.2更好地重構項目24 
2.1.3經典框架都在用設計模式解決問題36 
2.2工廠模式詳解36 
2.2.1工廠模式的由來36 
2.2.2簡單工廠模式37 
2.2.3工廠方法模式41 
2.2.4抽象工廠模式43 
2.2.5利用工廠模式重構的實踐案例47 
2.3單例模式詳解53
2.3.1單例模式的應用場景53 
2.3.2餓漢式單例模式53 
2.3.3懶漢式單例模式54 
2.3.4反射破壞單例60 
2.3.5序列化破壞單例61 
2.3.6註冊式單例模式68 
2.3.7線程單例實現ThreadLocal 74 
2.3.8單例模式小結75 
2.4原型模式詳解75 
2.4.1原型模式的應用場景75 
2.4.2淺克隆77 
2.4.3深克隆79 
2.4. 4克隆破壞單例模式81 
2.4.5 clone()方法的源碼82 
2.5代理模式詳解82 
2.5.1代理模式的應用場景82 
2.5.2靜態代理83 
2.5.3動態代理88 
2.5.4代理模式與Spring 107 
2.5.5靜態代理和動態代理的本質區別108 
2.5.6代理模式的優缺點109
2.6委派模式詳解109 
2.6.1委派模式的定義及應用場景109 
2.6.2委派模式在源碼中的體現111 
2.7策略模式詳解114 
2.7.1策略模式的應用場景114 
2.7.2用策略模式實現選擇支付方式的業務場景114 
2.7.3策略模式在JDK源碼中的體現122 
2.7.4策略模式的優缺點125 
2.7.5委派模式與策略模式綜合應用125 
2.8模板模式詳解129 
2.8.1模板模式的應用場景129 
2.8.2利用模板模式重構JDBC操作業務場景132 
2.8.3模板模式在源碼中的體現136 
2.8.4模板模式的優缺點138 
2.9適配器模式詳解139 
2.9.1適配器模式的應用場景139 
2.9. 2重構第三方登錄自由適配的業務場景141 
2.9.3適配器模式在源碼中的體現149 
2.9.4適配器模式的優缺點153
2.10裝飾者模式詳解153 
2.10.1裝飾者模式的應用場景153 
2.10.2裝飾者模式和適配器模式對比163 
2.10.3裝飾者模式在源碼中的應用163 
2.10.4裝飾者模式的優缺點165 
2.11觀察者模式詳解165 
2.11.1觀察者模式的應用場景165 
2.11.2觀察者模式在源碼中的應用175 
2.11.3基於Guava API輕鬆落地觀察者模式176 
2.11.4觀察者模式的優缺點177 
2.12各設計模式的總結與對比177 
2.12.1 GoF 23種設計模式簡介177 
2.12.2設計模式之間的關聯關係178 
2.12.3 Spring中常用的設計模式182 
2.13 Spring中的編程思想總結183 
第2篇Spring環境預熱
第3章Spring的前世今生186 
3.1一切從Bean開始187 
3.2 Spring的設計初衷188
3.3 BOP編程伊始188 
3.4理解BeanFactory 189 
3.5 AOP編程理念189 
第4章Spring 5系統架構191 
4.1核心容器192 
4.2 AOP和設備支持192 
4.3數據訪問與集成193 
4.4 Web組件194 
4.5通信報文194 
4.6集成測試194 
4.7集成兼容194 
4.8各模塊之間的依賴關係194 
第5章Spring版本命名規則196 
5.1常見軟件的版本命名196 
5.2語義化版本命名通行規則197 
5.3商業軟件中常見的修飾詞197 
5.4軟件版本號使用限定198 
5.5 Spring版本命名規則199 
第6章Spring源碼下載及構建技巧200 
6.1 Spring 5源碼下載200 
6.2基於Gradle的源碼構建技巧201
6.3 Gradle構建過程中的坑207 
第3篇Spring核心原理
第7章用300行代碼手寫提煉Spring核心原理210 
7.1自定義配置210 
7.1.1配置application.properties文件210 
7.1.2配置web.xml文件210 
7.1.3自定義註解211 
7.1.4配置註解212 
7.2容器初始化213 
7.2.1實現1.0版本213 
7.2.2實現2.0版本216 
7.2.3實現3.0版本223 
7.3運行效果演示227 
第8章一步一步手繪Spring IoC運行時序圖228 
8.1 Spring核心之IoC容器初體驗228 
8.1.1再談IoC與DI 228 
8.1.2 Spring核心容器類圖229 
8.1.3 Web IoC容器初體驗232 
8.2基於XML的IoC容器的初始化237 
8.2.1尋找入口238
8.2.2獲得配置路徑238 
8.2.3開始啟動240 
8.2.4創建容器242 
8.2.5載入配置路徑243 
8.2.6分配路徑處理策略244 
8.2.7解析配置文件路徑247 
8.2.8開始讀取配置內容249 
8.2.9準備文檔對象250 
8.2.10分配解析策略251 
8.2.11將配置載入內存252 
8.2.12載入<bean>元素257 
8.2.13載入<property>元素261 
8.2.14載入<property>子元素264 
8.2.15載入<list>子元素266 
8.2.16分配註冊策略267 
8.2.17向容器註冊267 
8.3基於註解的IoC初始化270 
8.3.1註解的前世今生270 
8.3.2定位Bean掃描路徑271 
8.3.3讀取註解的元數據273
8.3.4掃描指定包並解析為BeanDefinition 277 
8.3.5註冊註解BeanDefinition 283 
8.4 IoC容器初始化小結285 
第9章一步一步手繪Spring DI運行時序圖287 
9.1 Spring自動裝配之依賴注入287 
9.1.1依賴注入發生的時間287 
9.1.2尋找獲取Bean的入口288 
9.1.3開始實例化293 
9.1.4選擇Bean實例化策略297 
9.1.5執行Bean實例化299 
9.1.6準備依賴注入301 
9.1.7解析屬性依賴注入規則306 
9.1.8注入賦值310 
9.2 Spring IoC容器中那些鮮為人知的細節314 
9.2.1關於延時加載314 
9.2.2關於FactoryBean和BeanFactory 317 
9.2.3再述autowiring 322 
第10章一步一步手繪Spring AOP運行時序圖326
10.1 Spring AOP初體驗326 
10.1.1再述Spring AOP應用場景326 
10.1.2 AOP中必須明白的幾個概念327 
10.1.3使用Spring AOP的兩種方式329 
10.1.4切入點表達式的配置規則333 
10.2 Spring AOP源碼分析334 
10.2.1尋找入口334 
10.2.2選擇代理策略338 
10.2.3調用代理方法341 
10.2.4觸發通知347 
第11章一步一步手繪Spring MVC運行時序圖352 
11.1初探Spring MVC請求處理流程352 
11.2 Spring MVC九大組件353 
11.2.1 HandlerMapping 353 
11.2.2 HandlerAdapter 353 
11.2.3 HandlerExceptionResolver 354 
11.2.4 ViewResolver 354 
11.2.5 RequestToViewNameTranslator 354
11.2.6 LocaleResolver 354 
11.2.7 ThemeResolver 355 
11.2.8 MultipartResolver 355 
11.2.9 FlashMapManager 355 
11.3 Spring MVC源碼分析355 
11.3.1初始化階段356 
11.3.2運行調用階段359 
11.4 Spring MVC優化建議367 
第4篇Spring手寫實戰
第12章環境準備370 
12.1 IDEA集成Lombok插件370 
12.1.1安裝插件370 
12.1.2配置註解處理器373 
12.1.3使用插件374 
12.2從Servlet到ApplicationContext 375 
12.3準備基礎配置376 
12.3.1 application.properties配置377 
12.3.2 pom.xml配置377 
12.3.3 web.xml配置378
12.3.4 GPDispatcherServlet 378 
第13章IoC頂層結構設計380 
13.1 Annotation(自定義配置)模塊380 
13.1.1 @GPService 380 
13.1.2 @GPAutowired 381 
13.1.3 @GPController 381 
13.1.4 @GPRequestMapping 382 
13.1.5 @ GPRequestParam 382 
13.2 core(頂層接口)模塊382 
13.2.1 GPFactoryBean 382 
13.2.2 GPBeanFactory 383 
13.3 beans(配置封裝)模塊383 
13.3.1 GPBeanDefinition 383 
13.3.2 GPBeanWrapper 384 
13.4 context(IoC容器)模塊385 
13.4.1 GPAbstractApplicationContext 385 
13.4.2 GPDefaultListableBeanFactory 385
13.4.3 GPApplicationContext 385 
13.4.4 GPBeanDefinitionReader 388 
13.4.5 GPApplicationContextAware 391 
第14章完成DI模塊的功能392 
14.1從getBean()方法開始393 
14.2 GPBeanPostProcessor 395 
第15章完成MVC模塊的功能396 
15.1 MVC頂層設計396 
15.1 .1 GPDispatcherServlet 396 
15.1.2 GPHandlerMapping 402 
15.1.3 GPHandlerAdapter 403 
15.1.4 GPModelAndView 406 
15.1.5 GPViewResolver 406 
15.1.6 GPView 407 
15.2業務代碼實現409 
15.2.1 IQueryService 409 
15.2.2 QueryService 410 
15.2.3 IModifyService 410
15.2.4 ModifyService 411 
15.2.5 MyAction 412 
15.2.6 PageAction 413 
15.3定制模板頁面414 
15.3.1 first.html 414 
15.3.2 404.html 414 
15.3.3 500.html 415 
15.4運行效果演示415 
第16章完成AOP代碼織入417 
16.1基礎配置417 
16.2完成AOP頂層設計418 
16.2.1 GPJoinPoint 418 
16.2.2 GPMethodInterceptor 419 
16.2.3 GPAopConfig 419 
16.2.4 GPAdvisedSupport 420 
16.2.5 GPAopProxy 422 
16.2.6 GPCglibAopProxy 423 
16.2.7 GPJdkDynamicAopProxy 423 
16.2.8 GPMethodInvocation 425
16.3設計AOP基礎實現427 
16.3.1 GPAdvice 427 
16.3.2 GPAbstractAspectJAdvice 427 
16.3.3 GPMethodBeforeAdvice 428 
16.3.4 GPAfterReturningAdvice 429 
16.3.5 GPAfterThrowingAdvice 430 
16.3.6接入getBean()方法430 
16.4織入業務代碼432 
16.4.1 LogAspect 432 
16.4.2 IModifyService 433 
16.4.3 ModifyService 434 
16.5運行效果演示435 
第5篇Spring數據訪問
第17章數據庫事務原理詳解438 
17.1從Spring事務配置說起438 
17.2事務的基本概念439 
17.3事務的基本原理439 
17.4 Spring事務的傳播屬性440 
17.5數據庫事務隔離級別441
17.6 Spring中的事務隔離級別441 
17.7事務的嵌套442 
17.8 Spring事務API架構圖444 
17.9淺談分佈式事務444 
第18章Spring JDBC源碼初探446 
18.1異常處理447 
18.2 config模塊448 
18.3 core模塊450 
18.4 DataSource 456 
18.5 object模塊457 
18.6 JdbcTemplate 458 
18.7 NamedParameterJdbcTemplate 458 
第19章基於Spring JDBC手寫ORM框架459 
19.1實現思路概述459 
19.1.1從ResultSet說起459 
19.1.2為什麼需要ORM框架464 
19.2搭建基礎架構467 
19.2.1 Page 467 
19.2.2 ResultMsg 470 
19.2.3 BaseDao 471
19.2.4 QueryRule 473 
19.2.5 Order 479 
19.3基於Spring JDBC實現關鍵功能480 
19.3.1 ClassMappings 480 
19.3.2 EntityOperation 483 
19.3.3 QueryRuleSqlBuilder 488 
19.3.4 BaseDaoSupport 498 
19.4動態數據源切換的底層原理507 
19.4.1 DynamicDataSource 508 
19.4.2 DynamicDataSourceEntry 509 
19.5運行效果演示510 
19.5.1創建Member實體類510 
19.5.2創建Order實體類511 
19.5.3創建MemberDao 512 
19.5.4創建OrderDao 512 
19.5.5修改db.properties文件514 
19.5 .6修改application-db.xml文件515 
19.5.7編寫測試用例516
第6篇Spring經驗分享
第20章Spring 5新特性總結520 
20.1升級到Java SE 8和Java EE 7 520 
20.2反應式編程模型521 
20.3使用註解進行編程521 
20.4函數式編程522 
20.5使用REST端點執行反應式編程523 
20.6支持HTTP/2 523 
20.7 Kotlin和Spring WebFlux 523 
20.8使用Lambda表達式註冊Bean 524 
20.9 Spring Web MVC支持最新的API 524 
20.10使用JUnit 5執行條件和並發測試525 
20.11包清理和棄用526 
20.12 Spring核心和容器的一般更新526 
20.13我如何看Spring 5 527 
第21章關於Spring的經典高頻面試題528 
21.1什麼是Spring框架,Spring框架有哪些主要模塊528 
21.2使用Spring框架能帶來哪些好處528
21.3什麼是控制反轉(IoC),什麼是依賴注入529 
21.4在Java中依賴注入有哪些方式529 
21.5 BeanFactory和ApplicationContext有什麼區別530 
21.6 Spring提供幾種配置方式來設置元數據530 
21.7如何使用XML配置方式配置Spring 531 
21.8 Spring提供哪些配置形式532 
21.9怎樣用註解的方式配置Spring 533 
21.10請解釋Spring Bean的生命週期534 
21.11 Spring Bean作用域的區別是什麼535 
21.12什麼是Spring Inner Bean 535 
21.13 Spring中的單例Bean是線程安全的嗎536 
21.14請舉例說明如何在Spring中註入一個Java集合536 
21.15如何向Spring Bean中註入java.util.Properties 537 
21.16請解釋Spring Bean的自動裝配538 
21.17自動裝配有哪些局限性538 
21.18請解釋各種自動裝配模式的區別539
21.19請舉例解釋@Required註解539 
21.20請舉例說明@Qualifier註解540 
21.21構造方法注入和設值注入有什麼區別540 
21.22 Spring中有哪些不同類型的事件541 
21.23 FileSystemResource和ClassPathResource有什麼區別542 
21.24 Spring中用到了哪些設計模式542 
21.25在Spring中如何更有效地使用JDBC 543 
21.26請解釋Spring中的IoC容器543 
21.27在Spring中可以注入null或空字符串嗎543