最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java_Spring之Spring5?的新特性

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

1 與 JDK 相關的升級

1.1 jdk 版本要求:

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

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

第一:基于 JDK8 的反射增強

請看下面的代碼:

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();
    }
 
    // 每次重新生成對象
    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)建對象的時間:" + (e - s));
    }
 
    // 同一個對象
    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 億次給同一對象賦值的時間: " + (e - s));
    }
 
    //使用反射創(chuàng)建對象
    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)建對象的時間:" + (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)運行時間如下:

當切換到 jdk1.7 版本之后,運行時間如下:

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

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

2 核心容器的更新

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

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

3 JetBrains Kotlin 語言支持

Kolin概述:是一種支持函數(shù)式編程編程風格的面向對象語言。Kotlin 運行在 JVM 之上,但運行環(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 注冊 bean 對象到 spring 容器:

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

4 響應式編程風格

  • 此次 Spring 發(fā)行版本的一個激動人心的特性就是新的響應式堆棧 WEB 框架。這個堆棧完全的響應式且非阻塞,適合于事件循環(huán)風格的處理,可以進行少量線程的擴展。
  • Reactive Streams 是來自于 Netflix, Pivotal, Typesafe, Red Hat, Oracle, Twitter 以及Spray.io 的工程師特地開發(fā)的一個 API。它為響應式編程實現(xiàn)的實現(xiàn)提供一個公共的 API,好實現(xiàn)Hibernate 的 JPA。這里 JPA 就是這個 API, 而 Hibernate 就是實現(xiàn)。
  • Reactive Streams API 是 Java 9 的官方版本的一部分。在 Java 8 中, 你會需要專門引入依賴來使用 Reactive Streams API。
  • Spring Framework 5.0 對于流式處理的支持依賴于 Project Reactor 來構建, 其專門實現(xiàn)了Reactive Streams API。
  • Spring Framework 5.0 擁有一個新的 spring-webflux 模塊,支持響應式 HTTP 和 WebSocket 客戶端。
  • Spring Framework 5.0 還提供了對于運行于服務器之上,包含了 REST, HTML, 以及 WebSocket 風格交互的響應式網(wǎng)頁應用程序的支持。
  • 在 spring-webflux 中包含了兩種獨立的服務端編程模型:
    • 基于注解:使用到了@Controller 以及 Spring MVC 的其它一些注解;
    • 使用 Java 8 lambda 表達式的函數(shù)式風格的路由和處理。
    • 有 了 Spring Webflux, 你現(xiàn)在可以創(chuàng)建出 WebClient, 它是響應式且非阻塞的,可以作為RestTemplate 的一個替代方案。
  • 這里有一個使用 Spring 5.0 的 REST 端點的 WebClient 實現(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 來編寫測試以及擴展。此外還提供了一個編程以及擴展模型,Jupiter 子項目提供了一個測試引擎來在 Spring 上運行基于 Jupiter 的測試。
  • 另外,Spring Framework 5 還提供了在 Spring TestContext Framework 中進行并行測試的擴展。
  • 針對響應式編程模型, spring-test 現(xiàn)在還引入了支持 Spring WebFlux 的 WebTestClient 集成測試的支持,類似于 MockMvc,并不需要一個運行著的服務端。使用一個模擬的請求或者響應, WebTestClient 就可以直接綁定到 WebFlux 服務端設施。
  • 可以在這里找到這個激動人心的 TestContext 框架所帶來的增強功能的完整列表。
  • Spring Framework 5.0 仍然支持 JUnit!

6 依賴類庫的更新

終止支持的類庫

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

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

相關文章

  • Spring Boot項目搭建的兩種方式

    Spring Boot項目搭建的兩種方式

    springboot簡單快捷方便的優(yōu)點深受用戶喜愛,springboot開發(fā)環(huán)境搭建過程是每個開發(fā)者必須要做的工作,今天小編寫的一篇教程關于Spring Boot項目搭建方法,通過兩種方式給大家介紹的非常詳細,需要的朋友參考下吧
    2021-06-06
  • Java 8 lambda表達式引入詳解及實例

    Java 8 lambda表達式引入詳解及實例

    這篇文章主要介紹了Java 8 lambda表達式引入詳解及實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • MyBatis中#{}和${}有哪些區(qū)別

    MyBatis中#{}和${}有哪些區(qū)別

    大家好,本篇文章主要講的是MyBatis中#{}和${}區(qū)別,感興趣的同學趕快來看一看,對你有幫助的話記得收藏一下,方向下次瀏覽
    2021-12-12
  • 如何為Spark Application指定不同的JDK版本詳解

    如何為Spark Application指定不同的JDK版本詳解

    這篇文章主要給大家介紹了關于如何為Spark Application指定不同的JDK版本的相關資料,文中通過示例代碼將解決的方法介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友下面來隨著小編一起學習學習吧。
    2017-11-11
  • Java實現(xiàn)定時任務

    Java實現(xiàn)定時任務

    這篇文章主要為大家詳細介紹了Java實現(xiàn)定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • java實現(xiàn)掃雷小游戲

    java實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • MyBatis Mapper.xml中的命名空間及命名方式

    MyBatis Mapper.xml中的命名空間及命名方式

    這篇文章主要介紹了MyBatis Mapper.xml中的命名空間及命名方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot?自定義注解之脫敏注解詳解

    SpringBoot?自定義注解之脫敏注解詳解

    這篇文章主要介紹了SpringBoot?自定義注解之脫敏注解詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java基于NIO實現(xiàn)群聊功能

    Java基于NIO實現(xiàn)群聊功能

    這篇文章主要為大家詳細介紹了Java基于NIO實現(xiàn)群聊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • java多線程編程之慎重使用volatile關鍵字

    java多線程編程之慎重使用volatile關鍵字

    volatile關鍵字相信了解Java多線程的讀者都很清楚它的作用。volatile關鍵字用于聲明簡單類型變量,下面看一下為什么要慎重使用volatile關鍵字
    2014-01-01

最新評論

鸡西市| 呼伦贝尔市| 泌阳县| 洛扎县| 蕉岭县| 嘉兴市| 小金县| 金寨县| 柏乡县| 阳朔县| 桓台县| 阿克陶县| 太和县| 嘉义县| 永福县| 张家口市| 广饶县| 密云县| 南安市| 获嘉县| 大竹县| 永和县| 肥东县| 百色市| 南溪县| 惠东县| 安阳县| 滕州市| 五常市| 申扎县| 大新县| 江源县| 包头市| 红桥区| 五指山市| 鹿邑县| 万安县| 平乡县| 潍坊市| 旬邑县| 宿迁市|