欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java_Spring之Spring5?的新特性

 更新時(shí)間:2023年04月06日 09:45:01   作者:JiangTao_xlili  
這篇文章主要介紹了Java_Spring中Spring5?的新特性,需要利用jdk8?版本更新的內(nèi)容,依賴(lài)庫(kù)更新,感興趣的小伙伴可以參考閱讀

1 與 JDK 相關(guān)的升級(jí)

1.1 jdk 版本要求:

  • spring5.0 在 2017 年 9 月發(fā)布了它的 GA(通用)版本。該版本是基于 jdk8 編寫(xiě)的,所以 jdk8 以下版本將無(wú)法使用。同時(shí),可以兼容 jdk9 版本。
  • tomcat 版本要求 8.5 及以上。
  • 注:
    • 使用 jdk8 構(gòu)建工程,可以降版編譯。但是不能使用 jdk8 以下版本構(gòu)建工程。
    • 由于 jdk 和 tomcat 版本的更新,IDE 也需要同時(shí)更新。(目前使用的 eclipse 4.7.2)

1.2 利用 jdk8 版本更新的內(nèi)容

第一:基于 JDK8 的反射增強(qiáng)

請(qǐng)看下面的代碼:

public class Test {
 
    //循環(huán)次數(shù)定義:10 億次
    private static final int loopCnt = 1000 * 1000 * 1000;
    
    public static void main(String[] args) throws Exception {
        //輸出 jdk 的版本
        System.out.println("java.version=" + System.getProperty("java.version"));
        t1();
        t2();
        t3();
    }
 
    // 每次重新生成對(duì)象
    public static void t1() {
        
        long s = System.currentTimeMillis();
        
        for (int i = 0; i < loopCnt; i++) {
            Person p = new Person();
            p.setAge(31);
        }
    
        long e = System.currentTimeMillis();
        System.out.println("循環(huán) 10 億次創(chuàng)建對(duì)象的時(shí)間:" + (e - s));
    }
 
    // 同一個(gè)對(duì)象
    public static void t2() {
 
        long s = System.currentTimeMillis();
        Person p = new Person();
        
        for (int i = 0; i < loopCnt; i++) {
            p.setAge(32);
        }
 
        long e = System.currentTimeMillis();
        System.out.println("循環(huán) 10 億次給同一對(duì)象賦值的時(shí)間: " + (e - s));
    }
 
    //使用反射創(chuàng)建對(duì)象
    public static void t3() throws Exception {
        
        long s = System.currentTimeMillis();
        Class<Person> c = Person.class;
        Person p = c.newInstance();
        Method m = c.getMethod("setAge", Integer.class);
 
        for (int i = 0; i < loopCnt; i++) {
            m.invoke(p, 33);
        }
 
        long e = System.currentTimeMillis();
        System.out.println("循環(huán) 10 億次反射創(chuàng)建對(duì)象的時(shí)間:" + (e - s));
    }
 
    static class Person {
        
        private int age = 20;
    
        public int getAge() {
            return age;
        }
 
        public void setAge(Integer age) {
            this.age = age;
        }
    }
}

jdk1.8 版本(就是 JDK8)運(yùn)行時(shí)間如下:

當(dāng)切換到 jdk1.7 版本之后,運(yùn)行時(shí)間如下:

有此我們可以看出,在反射創(chuàng)建對(duì)象上,jdk8 確實(shí)做了加強(qiáng)。

  • 第二:@NonNull 注解和@Nullable 注解的使用
    • 用 @Nullable 和 @NotNull 注解來(lái)顯示表明可為空的參數(shù)和以及返回值。這樣就夠在編譯的時(shí)候處理空值而不是在運(yùn)行時(shí)拋出 NullPointerExceptions。
  • 第三:日志記錄方面
    • Spring Framework 5.0 帶來(lái)了 Commons Logging 橋接模塊的封裝, 它被叫做 spring-jcl 而不是標(biāo)準(zhǔn)的 Commons Logging。當(dāng)然,無(wú)需任何額外的橋接,新版本也會(huì)對(duì) Log4j 2.x, SLF4J, JUL ( java.util.logging) 進(jìn)行自動(dòng)檢測(cè)。

2 核心容器的更新

  • Spring Framework 5.0 現(xiàn)在支持候選組件索引作為類(lèi)路徑掃描的替代方案。該功能已經(jīng)在類(lèi)路徑掃描器中添加,以簡(jiǎn)化添加候選組件標(biāo)識(shí)的步驟。
  • 應(yīng)用程序構(gòu)建任務(wù)可以定義當(dāng)前項(xiàng)目自己的 META-INF/spring.components 文件。在編譯時(shí),源模型是自包含的,JPA 實(shí)體和 Spring 組件是已被標(biāo)記的。
  • 從索引讀取實(shí)體而不是掃描類(lèi)路徑對(duì)于小于 200 個(gè)類(lèi)的小型項(xiàng)目是沒(méi)有明顯差異。但對(duì)大型項(xiàng)目影響較大。加載組件索引開(kāi)銷(xiāo)更低。因此,隨著類(lèi)數(shù)的增加,索引讀取的啟動(dòng)時(shí)間將保持不變。
  • 加載組件索引的耗費(fèi)是廉價(jià)的。因此當(dāng)類(lèi)的數(shù)量不斷增長(zhǎng),加上構(gòu)建索引的啟動(dòng)時(shí)間仍然可以維持一個(gè)常數(shù), 不過(guò)對(duì)于組件掃描而言,啟動(dòng)時(shí)間則會(huì)有明顯的增長(zhǎng)。
  • 這個(gè)對(duì)于處于大型 Spring 項(xiàng)目的開(kāi)發(fā)者所意味著的,是應(yīng)用程序的啟動(dòng)時(shí)間將被大大縮減。雖然 20或者 30 秒鐘看似沒(méi)什么,但如果每天要這樣登上好幾百次,加起來(lái)就夠你受的了。使用了組件索引的話(huà),就能幫助你每天過(guò)的更加高效。

可以在 Spring 的 Jira 上了解更多關(guān)于組件索引的相關(guān)信息。

3 JetBrains Kotlin 語(yǔ)言支持

Kolin概述:是一種支持函數(shù)式編程編程風(fēng)格的面向?qū)ο笳Z(yǔ)言。Kotlin 運(yùn)行在 JVM 之上,但運(yùn)行環(huán)境并不限于 JVM。

Kolin 的示例代碼:

{
    ("/movie" and accept(TEXT_HTML)).nest {
        GET("/", movieHandler::findAllView)
        GET("/{card}", movieHandler::findOneView)
    }
 
    ("/api/movie" and accept(APPLICATION_JSON)).nest {
        GET("/", movieApiHandler::findAll)
        GET("/{id}", movieApiHandler::findOne)
    }
}

Kolin 注冊(cè) bean 對(duì)象到 spring 容器:

val context = GenericApplicationContext {
    registerBean()
    registerBean { Cinema(it.getBean()) }
}

4 響應(yīng)式編程風(fēng)格

  • 此次 Spring 發(fā)行版本的一個(gè)激動(dòng)人心的特性就是新的響應(yīng)式堆棧 WEB 框架。這個(gè)堆棧完全的響應(yīng)式且非阻塞,適合于事件循環(huán)風(fēng)格的處理,可以進(jìn)行少量線程的擴(kuò)展。
  • Reactive Streams 是來(lái)自于 Netflix, Pivotal, Typesafe, Red Hat, Oracle, Twitter 以及Spray.io 的工程師特地開(kāi)發(fā)的一個(gè) API。它為響應(yīng)式編程實(shí)現(xiàn)的實(shí)現(xiàn)提供一個(gè)公共的 API,好實(shí)現(xiàn)Hibernate 的 JPA。這里 JPA 就是這個(gè) API, 而 Hibernate 就是實(shí)現(xiàn)。
  • Reactive Streams API 是 Java 9 的官方版本的一部分。在 Java 8 中, 你會(huì)需要專(zhuān)門(mén)引入依賴(lài)來(lái)使用 Reactive Streams API。
  • Spring Framework 5.0 對(duì)于流式處理的支持依賴(lài)于 Project Reactor 來(lái)構(gòu)建, 其專(zhuān)門(mén)實(shí)現(xiàn)了Reactive Streams API。
  • Spring Framework 5.0 擁有一個(gè)新的 spring-webflux 模塊,支持響應(yīng)式 HTTP 和 WebSocket 客戶(hù)端。
  • Spring Framework 5.0 還提供了對(duì)于運(yùn)行于服務(wù)器之上,包含了 REST, HTML, 以及 WebSocket 風(fēng)格交互的響應(yīng)式網(wǎng)頁(yè)應(yīng)用程序的支持。
  • 在 spring-webflux 中包含了兩種獨(dú)立的服務(wù)端編程模型:
    • 基于注解:使用到了@Controller 以及 Spring MVC 的其它一些注解;
    • 使用 Java 8 lambda 表達(dá)式的函數(shù)式風(fēng)格的路由和處理。
    • 有 了 Spring Webflux, 你現(xiàn)在可以創(chuàng)建出 WebClient, 它是響應(yīng)式且非阻塞的,可以作為RestTemplate 的一個(gè)替代方案。
  • 這里有一個(gè)使用 Spring 5.0 的 REST 端點(diǎn)的 WebClient 實(shí)現(xiàn):
WebClient webClient = WebClient.create();
Mono person = webClient.get()
                .uri("http://localhost:8080/movie/42")
                .accept(MediaType.APPLICATION_JSON)
                .exchange()
                .then(response -> response.bodyToMono(Movie.class));

5 Junit5 支持

  • 完全支持 JUnit 5 Jupiter,所以可以使用 JUnit 5 來(lái)編寫(xiě)測(cè)試以及擴(kuò)展。此外還提供了一個(gè)編程以及擴(kuò)展模型,Jupiter 子項(xiàng)目提供了一個(gè)測(cè)試引擎來(lái)在 Spring 上運(yùn)行基于 Jupiter 的測(cè)試。
  • 另外,Spring Framework 5 還提供了在 Spring TestContext Framework 中進(jìn)行并行測(cè)試的擴(kuò)展。
  • 針對(duì)響應(yīng)式編程模型, spring-test 現(xiàn)在還引入了支持 Spring WebFlux 的 WebTestClient 集成測(cè)試的支持,類(lèi)似于 MockMvc,并不需要一個(gè)運(yùn)行著的服務(wù)端。使用一個(gè)模擬的請(qǐng)求或者響應(yīng), WebTestClient 就可以直接綁定到 WebFlux 服務(wù)端設(shè)施。
  • 可以在這里找到這個(gè)激動(dòng)人心的 TestContext 框架所帶來(lái)的增強(qiáng)功能的完整列表。
  • Spring Framework 5.0 仍然支持 JUnit!

6 依賴(lài)類(lèi)庫(kù)的更新

終止支持的類(lèi)庫(kù)

  • Portlet.
  • Velocity.
  • JasperReports.
  • XMLBeans.
  • JDO.
  • Guava.
  • 支持的類(lèi)庫(kù)
  • Jackson 2.6+
  • EhCache 2.10+ / 3.0 GA
  • Hibernate 5.0+
  • JDBC 4.0+
  • XmlUnit 2.x+
  • OkHttp 3.x+
  • Netty 4.1+

到此這篇關(guān)于Java_Spring之Spring5 的新特性的文章就介紹到這了,更多相關(guān)Java Spring5新特性?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Spring事物時(shí)不生效的場(chǎng)景及解決方法

    使用Spring事物時(shí)不生效的場(chǎng)景及解決方法

    今天介紹一下Spring事物不生效的場(chǎng)景,事物是我們?cè)陧?xiàng)目中經(jīng)常使用的,如果是Java的話(huà),基本上都使用Spring的事物,不過(guò)Spring的事物如果使用不當(dāng),那么就會(huì)導(dǎo)致事物失效或者不回滾,最終導(dǎo)致數(shù)據(jù)不一致,下面我們意義列舉不生效的場(chǎng)景,并給出解決方法
    2023-09-09
  • java swing 實(shí)現(xiàn)加載自定義的字體

    java swing 實(shí)現(xiàn)加載自定義的字體

    這篇文章主要介紹了java swing 實(shí)現(xiàn)加載自定義的字體,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 深入了解JAVA Jersey框架

    深入了解JAVA Jersey框架

    這篇文章主要介紹了JAVA Jersey的概念以及使用方法,文中講解非常詳細(xì),對(duì)大家的學(xué)習(xí)工作有所幫助,感興趣的朋友可以參考下
    2020-06-06
  • JDK8中String的intern()方法實(shí)例詳細(xì)解讀

    JDK8中String的intern()方法實(shí)例詳細(xì)解讀

    String字符串在我們?nèi)粘i_(kāi)發(fā)中最常用的,當(dāng)然還有他的兩個(gè)兄弟StringBuilder和StringBuilder,接下來(lái)通過(guò)本文給大家介紹JDK8中String的intern()方法詳細(xì)解讀,需要的朋友可以參考下
    2022-09-09
  • java學(xué)生信息管理系統(tǒng)MVC架構(gòu)詳解

    java學(xué)生信息管理系統(tǒng)MVC架構(gòu)詳解

    這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)MVC架構(gòu)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 基于JAVA中Jersey處理Http協(xié)議中的Multipart的詳解

    基于JAVA中Jersey處理Http協(xié)議中的Multipart的詳解

    之前在基于C#開(kāi)發(fā)彩信用最原始的StringBuilder拼接字符串方式處理過(guò)Multipart。現(xiàn)在在做一個(gè)項(xiàng)目的時(shí)候,由于之前的技術(shù)路線都是使用Jersey處理Http這塊,為了保持技術(shù)路線一致,研究了一下如何使用Jersey處理Http協(xié)議中的Multipart
    2013-05-05
  • JAVA 數(shù)據(jù)結(jié)構(gòu)鏈表操作循環(huán)鏈表

    JAVA 數(shù)據(jù)結(jié)構(gòu)鏈表操作循環(huán)鏈表

    這篇文章主要介紹了JAVA 數(shù)據(jù)結(jié)構(gòu)鏈表操作循環(huán)鏈表的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • spring boot 部署為jar包的方法示例

    spring boot 部署為jar包的方法示例

    本篇文章主要介紹了spring boot 部署為jar的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Java語(yǔ)言中的內(nèi)存泄露代碼詳解

    Java語(yǔ)言中的內(nèi)存泄露代碼詳解

    這篇文章主要介紹了Java語(yǔ)言中的內(nèi)存泄露代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 淺談java獲取UUID與UUID的校驗(yàn)

    淺談java獲取UUID與UUID的校驗(yàn)

    這篇文章主要介紹了java獲取UUID與UUID的校驗(yàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論