適讀人羣 :超強實戰技術升級指南,囊括源碼、設計思想、架構思維、實戰案例、開發經驗,Java架構師成長必備;本書基於Spring 5開發的架構師實戰指南,幾乎涵蓋在Spring應用中可能遇到的所有問題,包括核心原理(IOC、DI、AOP、MVC)、高仿手寫、數據訪問等。如果你想成爲架構師,恭喜你遇到了這本書;如果你不想成爲架構師,請把本書介紹給需要的人。
★《Spring 5核心原理與30個類手寫實戰》作者Tom有10餘年Java開發經驗,對Spring有深入研究及獨特見解
★本書幾乎涵蓋在Spring應用中可能遇到的所有問題,核心原理(IoC、DI、AOP、MVC)、高仿手寫、數據訪問等
★深度解析Spring 5的原理與新特性,從環境準備、頂層結構設計、數據訪問等方面一步步推導出Spring設計原理
★通過本書你可以:
- 加入作者專屬讀書羣,帶你透徹理解Spring5核心思想,讀書不在是一個人!
- 看源碼不再暈車,輕鬆找到入口。
- 系統學習設計思想,提高解決問題的效率。
- 培養架構思維能力,自驅學習能力。
- 用30個類提煉出Spring核心的精華思想,並保證功能可用。
- 從不一樣的角度分析Spring經典高頻面試題。
- 瞭解Spring 5 的新特性。
- 爲深入瞭解Spring Boot做鋪墊。
內容簡介
《Spring 5核心原理與30個類手寫實戰》基於編程開發實踐,不僅深度解析Spring 5的原理與新特性,更從環境準備、頂層結構設計、數據訪問等方面一步步地推導出Spring的設計原理。在每個知識點上,均以大量的經典代碼案例輔助講解,使理論緊密聯繫實際。最後手寫30個類,以體會Spring作者的創作過程,讓每一位讀者學以致用。
對於立志成爲Java架構師的技術人員,以及對以Spring爲核心的Java Web開發感興趣的計算機專業高校生、在職Java開發人員來說,本書是一本具備超強實戰意義的技術升級指南。讀者通過本書可以看源碼不再“暈車”,輕鬆找到入口;系統學習設計思想,提高解決問題的效率;培養架構思維能力,以及自驅學習能力。
精彩節選
Spring 5於2017年9月發佈了通用版本,它是自2013年12月以來第一個主要的Spring版本。它提供了一些人們期待已久的改進,還採用了一種全新的編程範例,以反應式原則爲基礎。
這個版本是很長時間以來最令人激動的版本。Spring 5兼容Java?8和JDK 9,它集成了反應式流,以方便後續提供一種顛覆性方法來實現端點和Web應用程序開發。
當然,反應式編程不僅是此版本的主題,還是令許多程序員激動不已的重大特性。人們對能夠針對負載波動進行無縫擴展的容災和響應式服務的需求在不斷增加,Spring 5很好地滿足了這一需求。
下面介紹Java SE 8和Java EE 7 API升級的基本內容、Spring 5的新反應式編程模型、對HTTP/2的支持,以及Spring通過Kotlin對函數式編程的全面支持。還會簡要介紹測試和性能增強,最後介紹對Spring核心和容器的一般性修訂。
20.1 升級到Java SE 8和Java EE 7
以前的Spring一直在支持一些棄用的Java版本,而Spring 5已從“舊包袱”中解放出來。爲了充分利用Java 8的特性,它的代碼庫已進行了改進,而且要求將Java 8作爲最低的JDK版本。
Spring 5在類路徑(和模塊路徑)上完全兼容Java 9,而且它通過了JDK 9測試套件的測試。對Java 9愛好者而言,這是一個好消息。
在API級別上,Spring 5兼容Java EE 8技術,滿足對Servlet 4.0、Bean Validation 2.0和全新的JSON Binding API的需求。對Java EE API的最低要求爲V7,該版本引入了針對Servlet、JPA和Bean Validation API的次要版本。
20.2 反應式編程模型
Spring 5最令人興奮的新特性是它的反應式編程模型。Spring 5基於一種反應式基礎而構建,而且是完全異步和非阻塞的。只需少量的線程,新的事件循環執行模型就可以垂直擴展。
Spring 5採用反應式流來提供在反應式組件中傳播負壓的機制。負壓是一個確保來自多個生產者的數據不會讓使用者不堪重負的概念。
Spring WebFlux是Spring 5的反應式核心,它爲開發人員提供了兩種爲Spring Web編程而設計的編程模型:基於註解的模型和Functional Web Framework(WebFlux.fn)。
基於註解的模型是Spring Web MVC的現代替代方案,該模型基於反應式基礎而構建,而Functional Web Framework是基於@Controller註解的編程模型的替代方案。這些模型都通過同一種反應式規則來運行,後者調整非阻塞HTTP來適應反應式流API。
20.3 使用註解進行編程
Web MVC程序員應該對Spring 5的基於註解的編程模型非常熟悉,Spring 5調整了Web MVC的@Controller編程模型,採用了相同的註解。
在下面的代碼中BookController類提供了兩個方法,分別響應針對某個圖書列表的HTTP請求,以及針對具有給定id的圖書的HTTP請求。請注意Mono和Flux等對象。這些對象是實現反應式流規範中的Publisher接口的反應式類型,它們的職責是處理數據流。Mono對象處理一個僅含1個元素的流,而Flux表示一個包含N個元素的流。
@RestController
@GetMapping("/book")
Flux list() {
return this.repository.findAll();
}
@GetMapping("/book/{id}")
Mono findById(@PathVariable String id) {
return this.repository.findOne(id);
}
}
</pre>
以上是針對Spring Web編程的註解,下面我們使用函數式Web框架來解決同一個問題。
20.4 函數式編程
Spring 5的函數式方法將請求委託給處理函數,這些函數接收一個服務器請求實例並返回一種反應式類型。來看一段代碼,創建BookHandler類,其中listBooks()和getBook()方法相當於Controller中的功能。
public Mono listBooks(ServerRequest request) {
return ServerResponse.ok()
.contentType(APPLICATION_JSON)
.body(repository.allPeople(), Book.class);
}
public Mono getBook(ServerRequest request) {
return repository.getBook(request.pathVariable("id"))
.then(book -> ServerResponse.ok()
.contentType(APPLICATION_JSON)
.body(fromObject(book)))
.otherwiseIfEmpty(ServerResponse.notFound().build());
}
}
通過路由函數來匹配HTTP請求參數與媒體類型,將客戶端請求路由到處理函數。下面的代碼展示了圖書資源端點URI將調用委託給合適的處理函數:
RouterFunction personRoute =
route(
GET("/books/{id}")
.and(accept(APPLICATION_JSON)), handler::getBook)
.andRoute(
GET("/books")
.and(accept(APPLICATION_JSON)), handler::listBooks);
這些示例背後的數據存儲也支持完整的反應式體驗,該體驗是通過Spring Data對反應式 Couchbase、Reactive MongoDB和Cassandra的支持來實現的。
20.5 使用 REST 端點執行反應式編程
新的編程模型脫離了傳統的Spring Web MVC模型,引入了一些很不錯的新特性。
舉例來說,WebFlux模塊爲RestTemplate提供了一種完全非阻塞、反應式的替代方案,名爲WebClient。下面創建一個WebClient,並調用books端點來請求一本給定id爲1234的圖書。
//通過WebClient調用REST端點
.get()
.url("/books/{id}", 1234)
.accept(APPLICATION_JSON)
.exchange(request)
.then(response -> response.bodyToMono(Book.class));
</pre>
20.6 支持HTTP/2
HTTP/2提高了傳輸性能,減少了延遲,並提高了應用程序的吞吐量,從而提供了豐富的Web體驗。
Spring 5提供專門的HTTP/2特性支持,還支持人們期望出現在JDK 9中的新HTTP客戶端。儘管HTTP/2的服務器推送功能已通過Jetty Servlet引擎的ServerPushFilter類向Spring開發人員公開很長一段時間了,但如果發現Spring 5中開箱即用地提供了HTTP/2性能增強,Web優化者們一定會爲此歡呼雀躍。
Spring 5.1提供Servlet 4.0,HTTP/2新特性將由Tomcat 9.0、Jetty 9.3和Undertow 1.4原生提供。
20.7 Kotlin和Spring WebFlux
寫在最後
如果你現在的工作經驗與應有的能力無法匹配,
如果你在自學路上找不到方向,
如果你現在是初級程序員,想往高級程序員晉級,
如果你希望成爲架構師,
本書都能幫到你。
編寫本書旨在使大家進入不一樣的思維境界,書中個人觀點若有不妥之處,懇望糾正!
本書有專屬6.8折優惠購買通道:需要購買者加qq:2187956196