日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

spring5新特性全面介紹

瀏覽:192日期:2023-08-08 17:23:34

前方:對于很多開發人員來說,目前大都還在使用spring4的時候,而spring5早已經發布。雖然你可能暫時還沒有使用到spring5,但還是需要對其有個大概的了解。

Spring 5 于 2017 年 9 月發布了通用版本 (GA),它標志著自 2013 年 12 月以來第一個主要 Spring Framework 版本。它提供了一些人們期待已久的改進,還采用了一種全新的編程范例,以反應式宣言中陳述的反應式原則為基礎。

這個版本是很長時間以來最令人興奮的 Spring Framework 版本。Spring 5 兼容 Java?8 和 JDK 9,它集成了反應式流,以便提供一種顛覆性方法來實現端點和 Web 應用程序開發。

誠然,反應式編程不僅是此版本的主題,還是令許多開發人員激動不已的重大特性。人們對能夠針對負載波動進行無縫擴展的災備和響應式服務的需求在不斷增加,Spring 5 很好地滿足了這一需求。

我還會簡要介紹測試和性能增強,最后介紹對 Spring 核心和容器的一般性修訂。

升級到 Java SE 8 和 Java EE 7

直到現在,Spring Framework 仍支持一些棄用的 Java 版本,但 Spring 5 已從舊包袱中解放出來。為了充分利用 Java 8 特性,它的代碼庫已進行了改進,而且該框架要求將 Java 8 作為最低的 JDK 版本。

Spring 5 在類路徑(和模塊路徑)上完全兼容 Java 9,而且它通過了 JDK 9 測試套件的測試。對 Java 9 愛好者而言,這是一條好消息,因為在 Java 9 發布后,Spring 能立即使用它。

在 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 的次要版本。

反應式編程模型

Spring 5 最令人興奮的新特性是它的反應式編程模型。Spring 5 Framework 基于一種反應式基礎而構建,而且是完全異步和非阻塞的。只需少量的線程,新的事件循環執行模型就可以垂直擴展。

該框架采用反應式流來提供在反應式組件中傳播負壓的機制。負壓是一個確保來自多個生產者的數據不會讓使用者不堪重負的概念。

Spring WebFlux 是 Spring 5 的反應式核心,它為開發人員提供了兩種為 Spring Web 編程而設計的編程模型:一種基于注解的模型和 Functional Web Framework (WebFlux.fn)。

基于注解的模型是 Spring WebMVC 的現代替代方案,該模型基于反應式基礎而構建,而 Functional Web Framework 是基于 @Controller 注解的編程模型的替代方案。這些模型都通過同一種反應式基礎來運行,后者調整非阻塞 HTTP 來適應反應式流 API。

使用注解進行編程

WebMVC 程序員應該對 Spring 5 的基于注解的編程模型非常熟悉。Spring 5 調整了 WebMVC 的@Controller 編程模型,采用了相同的注解。

在清單 1 中,BookController 類提供了兩個方法,分別響應針對某個圖書列表的 HTTP 請求,以及針對具有給定 id 的圖書的 HTTP 請求。請注意 resource 方法返回的對象(Mono 和 Flux)。這些對象是實現反應式流規范中的 Publisher 接口的反應式類型。它們的職責是處理數據流。Mono 對象處理一個僅含 1 個元素的流,而 Flux 表示一個包含 N 個元素的流。

清單 1. 反應式控制器

@RestControllerpublic class BookController {@GetMapping('/book')Flux<Book> list() {return this.repository.findAll();}@GetMapping('/book/{id}')Mono<Book> findById(@PathVariable String id) {return this.repository.findOne(id);}// Plumbing code omitted for brevity}

這是針對 Spring Web 編程的注解。現在我們使用函數式 Web 框架來解決同一個問題。

函數式編程

Spring 5 的新函數式方法將請求委托給處理函數,這些函數接受一個服務器請求實例并返回一種反應式類型。清單 2 演示了這一過程,其中 listBook 和 getBook 方法類似于清單 1 中的功能。

清單 2. 清單 2.BookHandler 函數類

public class BookHandler {public Mono<ServerResponse> listBooks(ServerRequest request) {return ServerResponse.ok().contentType(APPLICATION_JSON).body(repository.allPeople(), Book.class);}public Mono<ServerResponse> getBook(ServerRequest request) {return repository.getBook(request.pathVariable('id')).then(book -> ServerResponse.ok().contentType(APPLICATION_JSON).body(fromObject(book))).otherwiseIfEmpty(ServerResponse.notFound().build());}// Plumbing code omitted for brevity}

通過路由函數來匹配 HTTP 請求謂詞與媒體類型,將客戶端請求路由到處理函數。清單 3 展示了圖書資源端點 URI 將調用委托給合適的處理函數:

清單 3. Router 函數

BookHandler handler = new BookHandler();RouterFunction<ServerResponse> 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 的支持來實現的。

使用 REST 端點執行反應式編程

新的編程模型脫離了傳統的 Spring WebMVC 模型,引入了一些很不錯的新特性。

舉例來說,WebFlux 模塊為 RestTemplate 提供了一種完全非阻塞、反應式的替代方案,名為WebClient。清單 4 創建了一個 WebClient,并調用 books 端點來請求一本給定 id 為 1234 的圖書。

清單 4. 通過 WebClient 調用 REST 端點

Mono<Book> book = WebClient.create('http://localhost:8080').get().url('/books/{id}', 1234).accept(APPLICATION_JSON).exchange(request).then(response -> response.bodyToMono(Book.class));

HTTP/2 支持

HTTP/2 幕后原理:要了解 HTTP/2 如何提高傳輸性能,減少延遲,并幫助提高應用程序吞吐量,從而提供經過改進的豐富 Web 體驗,請查閱我的有關這項期待已久的升級的文章。

Spring Framework 5.0 將提供專門的 HTTP/2 特性支持,還支持人們期望出現在 JDK 9 中的新 HTTP 客戶端。盡管 HTTP/2 的服務器推送功能已通過 Jetty servlet 引擎的 ServerPushFilter 類向 Spring 開發人員公開了很長一段時間,但如果發現 Spring 5 中開箱即用地提供了 HTTP/2性能增強,Web 優化者們一定會為此歡呼雀躍。

Java EE Servlet 規范預計將于 2017 年第 4 季度發布,Servlet 4.0 支持將在 Spring 5.1 中提供。到那時,HTTP/2 特性將由 Tomcat 9.0、Jetty 9.3 和 Undertow 1.4 原生提供。

Kotlin 和 Spring WebFlux

Kotlin 是一種來自 JetBrains 的面向對象的語言,它支持函數式編程。它的主要優勢之一是與 Java 有非常高的互操作性。通過引入對 Kotlin 的專門支持,Spring 在 V5 中全面吸納了這一優勢。它的函數式編程風格與 Spring WebFlux 模塊完美匹配,它的新路由 DSL 利用了函數式 Web 框架以及干凈且符合語言習慣的代碼。可以像清單 5 中這樣簡單地表達端點路由:

清單 5. Kotlin 的用于定義端點的路由 DSL

@Beanfun apiRouter() = router {(accept(APPLICATION_JSON) and '/api').nest {'/book'.nest {GET('/', bookHandler::findAll)GET('/{id}', bookHandler::findOne)}'/video'.nest {GET('/', videoHandler::findAll)GET('/{genre}', videoHandler::findByGenre)}}}

使用 Kotlin 1.1.4+ 時,還添加了對 Kotlin 的不可變類的支持(通過帶默認值的可選參數),以及對完全支持 null 的 API 的支持。

使用 Lambda 表達式注冊 bean

作為傳統 XML 和 JavaConfig 的替代方案,現在可以使用 lambda 表達式注冊 Spring bean,使 bean 可以實際注冊為提供者。清單 6 使用 lambda 表達式注冊了一個 Book bean。

清單 6. 將 Bean 注冊為提供者

GenericApplicationContext context = new GenericApplicationContext();context.registerBean(Book.class, () -> newBook(context.getBean(Author.class)));

Spring WebMVC 支持最新的 API

全新的 WebFlux 模塊提供了許多新的、令人興奮的功能,但 Spring 5 也迎合了愿意繼續使用 Spring MVC 的開發人員的需求。Spring 5 中更新了模型-視圖-控制器框架,以兼容 WebFlux 和最新版的Jackson 2.9 和 Protobuf 3.0,甚至包括對新的 Java EE 8 JSON-Binding API 的支持。

除了 HTTP/2 特性的基礎服務器實現之外,Spring WebMVC 還通過 MVC 控制器方法的一個參數來支持 Servlet 4.0 的 PushBuilder。最后,WebMVC 全面支持 Reactor 3.1 的 Flux 和 Mono 對象,以及 RxJava1.3 和 2.1,它們被視為來自 MVC 控制器方法的返回值。這項支持的最終目的是支持 Spring Data 中的新的反應式 WebClient 和反應式存儲庫。

使用 JUnit 5 執行條件和并發測試

JUnit 和 Spring 5:Spring 5 全面接納了函數式范例,并支持 JUnit 5 及其新的函數式測試風格。還提供了對 JUnit 4 的向后兼容性,以確保不會破壞舊代碼。

Spring 5 的測試套件通過多種方式得到了增強,但最明顯的是它對JUnit 5 的支持。現在可以在您的單元測試中利用 Java 8 中提供的函數式編程特性。清單 7 演示了這一支持:

清單 7. 清單 7.JUnit 5 全面接納了 Java 8 流和 lambda 表達式

@Testvoid givenStreamOfInts_SumShouldBeMoreThanFive() {assertTrue(Stream.of(20, 40, 50).stream().mapToInt(i -> i).sum() > 110, () -> 'Total should be more than 100');}

遷移到 JUnit 5:如果您對升級到 JUnit 5 持觀望態度,Steve Perry 的分兩部分的深入剖析教程將說服您冒險嘗試。

Spring 5 繼承了 JUnit 5 在 Spring TestContext Framework 內實現多個擴展 API 的靈活性。舉例而言,開發人員可以使用 JUnit 5 的條件測試執行注解 @EnabledIf 和 @DisabledIf 來自動計算一個 SpEL (Spring Expression Language) 表達式,并適當地啟用或禁用測試。借助這些注解,Spring 5 支持以前很難實現的復雜的條件測試方案。Spring TextContext Framework 現在能夠并發執行測試。

使用 Spring WebFlux 執行集成測試

Spring Test 現在包含一個 WebTestClient,后者支持對 Spring WebFlux 服務器端點執行集成測試。WebTestClient 使用模擬請求和響應來避免耗盡服務器資源,并能直接綁定到 WebFlux 服務器基礎架構。

WebTestClient 可綁定到真實的服務器,或者使用控制器或函數。在清單 8 中,WebTestClient 被綁定到 localhost:

清單 8. 綁定到 localhost 的 WebTestClient

WebTestClient testClient = WebTestClient.bindToServer().baseUrl('http://localhost:8080').build();

在清單 9 中,測試了 RouterFunction:

清單 9. 將 WebTestClient 綁定到 RouterFunction

RouterFunction bookRouter = RouterFunctions.route( RequestPredicates.GET('/books'),request -> ServerResponse.ok().build());WebTestClient.bindToRouterFunction(bookRouter).build().get().uri('/books').exchange().expectStatus().isOk().expectBody().isEmpty();

包清理和棄用

Spring 5 中止了對一些過時 API 的支持。遭此厄運的還有 Hibernate 3 和 4,為了支持 Hibernate 5,它們遭到了棄用。另外,對 Portlet、Velocity、JasperReports、XMLBeans、JDO 和 Guava 的支持也已中止。

包級別上的清理工作仍在繼續:Spring 5 不再支持beans.factory.access、jdbc.support.nativejdbc、mock.staticmock(來自 spring-aspects 模塊)或 web.view.tiles2M。Tiles 3 現在是 Spring 的最低要求。

對 Spring 核心和容器的一般更新

Spring Framework 5 改進了掃描和識別組件的方法,使大型項目的性能得到提升。目前,掃描是在編譯時執行的,而且向 META-INF/spring.components 文件中的索引文件添加了組件坐標。該索引是通過一個為項目定義的特定于平臺的應用程序構建任務來生成的。

標有來自 javax 包的注解的組件會添加到索引中,任何帶 @Index 注解的類或接口都會添加到索引中。Spring 的傳統類路徑掃描方式沒有刪除,而是保留為一種后備選擇。有許多針對大型代碼庫的明顯性能優勢,而托管許多 Spring 項目的服務器也會縮短啟動時間。

Spring 5 還添加了對 @Nullable 的支持,后者可用于指示可選的注入點。使用者現在必須準備接受 null 值。此外,還可以使用此注解來標記可以為 null 的參數、字段和返回值。@Nullable 主要用于 IntelliJ IDEA 等 IDE,但也可用于 Eclipse 和 FindBugs,它使得在編譯時處理 null 值變得更方便,而無需在運行時發送 NullPointerExceptions。

Spring Logging 還提升了性能,自帶開箱即用的 Commons Logging 橋接器。現在已通過資源抽象支持防御性編程,為 getFile 訪問提供了 isFile 指示器。

結束語

Spring 5 的首要特性是新的反應式編程模型,這代表著對提供可無縫擴展、基于 Spring 的響應式服務的重大保障。隨著人們對 Spring 5 的采用,開發人員有望看到反應式編程將會成為使用 Java 語言的 Web 和企業應用程序開發的未來發展道路。

未來的 Spring Framework 版本將繼續反映這一承諾,因為 Spring Security、Spring Data 和 Spring Integration 有望采用反應式編程的特征和優勢。

總之,Spring 5 代表著一次大受 Spring 開發人員歡迎的范例轉變,同時也為其他框架指出了一條發展之路。

以上就是spring5新特性全面介紹的詳細內容,更多關于spring5新特性的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人在线视频区| 伊人久久大香线蕉av超碰演员| 99国产精品免费视频观看| 美女av一区| 九九99久久精品在免费线bt| 日韩中文字幕视频网| 四虎成人精品一区二区免费网站| 免费观看在线综合| 亚州精品视频| 国产精品网站在线看| 国产精品s色| 97精品国产福利一区二区三区| 久久一区国产| 美女久久久精品| 日本在线啊啊| 国产亚洲综合精品| 日韩二区在线观看| 韩日一区二区| 好吊一区二区三区| 日韩精品一区二区三区中文字幕| 日韩一区二区三区精品视频第3页| 在线看片日韩| 国产精品xxxav免费视频| 久久久久久网| 亚洲免费中文| 亚洲高清久久| 日韩福利视频一区| 色在线视频观看| 99精品在线免费在线观看| 亚洲一区二区三区高清不卡| 国产精品一二| 国产亚洲高清视频| 精品国产精品国产偷麻豆| 91成人精品视频| 久久要要av| 免费中文字幕日韩欧美| 免费视频一区三区| 成人台湾亚洲精品一区二区 | 日韩视频精品在线观看| 美女视频网站久久| 少妇精品久久久一区二区| 中文在线免费视频| 中文字幕亚洲影视| 丝袜美腿成人在线| 欧美特黄a级高清免费大片a级| 精品国产一区二区三区2021| 日韩精品欧美成人高清一区二区| 欧美综合精品| 国产激情综合| 国产日产精品_国产精品毛片 | 91视频精品| 国产欧美一区二区精品久久久| 欧美日韩亚洲一区| 日本不卡高清视频| 97久久亚洲| 久久国产精品免费一区二区三区 | 国产亚洲欧美日韩在线观看一区二区 | 亚洲综合精品| 丝袜美腿诱惑一区二区三区| 中文日韩在线| 亚洲影院天堂中文av色| 欧美啪啪一区| 在线亚洲人成| 在线国产一区| 日韩一区二区三区四区五区| 欧美午夜不卡| 欧美精品中文| 亚洲欧美综合| 日本成人在线一区| 久久久久免费| 精品久久久亚洲| 久久免费视频66| 亚洲一区二区免费看| 国产亚洲观看| 午夜av不卡| 不卡一区2区| 亚洲女同中文字幕| 久久久久久久久久久9不雅视频| 日韩一二三区在线观看| 999精品在线| 91精品在线观看国产| 国产一区二区三区天码| 蜜臀av亚洲一区中文字幕| 日韩一区二区三区精品| 国产精品密蕾丝视频下载| 欧美国产美女| 日韩国产欧美| 久久精品国产99久久| 另类欧美日韩国产在线| 国产精品二区不卡| 免费成人在线视频观看| 国产精品毛片久久久| 精品一区免费| 欧美日韩国产综合网| 欧美aa在线视频| 国产探花在线精品| 国产精品一级| 国产欧美亚洲精品a| 亚洲专区视频| 在线精品福利| 美女在线视频一区| 国产在线看片免费视频在线观看| 国产图片一区| 国产乱码精品一区二区三区亚洲人| 黄色日韩在线| 久久99性xxx老妇胖精品| 欧美激情另类| 亚洲一区亚洲| 中文精品电影| 快she精品国产999| 亚洲一区二区日韩| 日韩精品中文字幕吗一区二区 | 日韩欧美精品一区二区综合视频| 久久激情网站| 荡女精品导航| 蜜桃视频一区二区三区| 伊人久久婷婷| 日韩精品中文字幕一区二区| 91精品国产自产精品男人的天堂| 亚洲欧美日韩国产综合精品二区| 亚洲精品一二三**| 国产精品久久久亚洲一区| 日韩欧美激情电影| 亚洲1区在线| 亚洲一级影院| 日韩精品中文字幕吗一区二区| 日韩福利视频网| 日韩福利视频导航| 九一成人免费视频| 中国女人久久久| 六月丁香综合在线视频| 亚洲成av在线| 久久一区二区三区喷水| 青草国产精品| 三上亚洲一区二区| 欧美日韩国产免费观看视频| 97精品久久| 天海翼亚洲一区二区三区| 国产99久久| 亚洲伊人精品酒店| 日韩中文影院| 国产精品3区| 一区免费在线| 日韩精品一卡二卡三卡四卡无卡| sm久久捆绑调教精品一区| 97se亚洲| 国产一区二区精品久| 成人午夜精品| 久久国产成人| 精品91久久久久| 精品高清久久| 日韩国产精品久久久久久亚洲| 国产亚洲一区二区手机在线观看| 日韩激情一区| 日本不卡一二三区黄网| 亚洲成人日韩| 亚洲一区二区三区无吗| 免费成人在线影院| 在线视频免费在线观看一区二区| 精品视频网站| 美女视频免费精品| 欧美一级二级三级视频| 久久福利精品| 亚洲欧美日韩综合国产aⅴ| 日韩欧美一区二区三区在线视频| 国产精品普通话对白| 免费在线观看一区| 欧美大黑bbbbbbbbb在线| 欧美色图一区| 日韩影院精彩在线| 免费观看日韩电影| 亚洲深夜福利在线观看| 伊人精品一区| 欧美天堂视频| 婷婷综合亚洲| 日韩专区一卡二卡| 亚洲制服欧美另类| 久热re这里精品视频在线6| 黄色精品网站| 日韩精品一页| 精品视频91| 1024精品一区二区三区| 激情欧美丁香| 亚洲欧美日韩国产一区二区| 天堂精品久久久久| 国产精品一区二区精品 | 成人影视亚洲图片在线| 美女性感视频久久| 午夜国产精品视频| 亚洲青青久久| 精品一区二区三区免费看| 久久电影tv| 亚洲精品一级| 成人台湾亚洲精品一区二区| 欧美91精品| 91精品一区| 国产亚洲高清在线观看| 国产欧美日韩精品一区二区免费| 激情久久五月| 国产一区二区三区日韩精品|