中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java Spring之Spring5的新特性有哪些

發布時間:2023-05-06 11:10:04 來源:億速云 閱讀:137 作者:zzz 欄目:開發技術

這篇文章主要介紹“Java Spring之Spring5的新特性有哪些”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java Spring之Spring5的新特性有哪些”文章能幫助大家解決問題。

    1 與 JDK 相關的升級

    1.1 jdk 版本要求:

    • spring5.0 在 2017 年 9 月發布了它的 GA(通用)版本。該版本是基于 jdk8 編寫的,所以 jdk8 以下版本將無法使用。同時,可以兼容 jdk9 版本。

    • tomcat 版本要求 8.5 及以上。

    • 注:

      • 使用 jdk8 構建工程,可以降版編譯。但是不能使用 jdk8 以下版本構建工程。

      • 由于 jdk 和 tomcat 版本的更新,IDE 也需要同時更新。(目前使用的 eclipse 4.7.2)

    1.2 利用 jdk8 版本更新的內容

    第一:基于 JDK8 的反射增強

    請看下面的代碼:

    public class Test {
     
        //循環次數定義: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("循環 10 億次創建對象的時間:" + (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("循環 10 億次給同一對象賦值的時間: " + (e - s));
        }
     
        //使用反射創建對象
        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("循環 10 億次反射創建對象的時間:" + (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)運行時間如下:

    Java Spring之Spring5的新特性有哪些

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

    Java Spring之Spring5的新特性有哪些

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

    • 第二:@NonNull 注解和@Nullable 注解的使用

      • 用 @Nullable 和 @NotNull 注解來顯示表明可為空的參數和以及返回值。這樣就夠在編譯的時候處理空值而不是在運行時拋出 NullPointerExceptions。

    • 第三:日志記錄方面

      • Spring Framework 5.0 帶來了 Commons Logging 橋接模塊的封裝, 它被叫做 spring-jcl 而不是標準的 Commons Logging。當然,無需任何額外的橋接,新版本也會對 Log4j 2.x, SLF4J, JUL ( java.util.logging) 進行自動檢測。

    2 核心容器的更新

    • Spring Framework 5.0 現在支持候選組件索引作為類路徑掃描的替代方案。該功能已經在類路徑掃描器中添加,以簡化添加候選組件標識的步驟。

    • 應用程序構建任務可以定義當前項目自己的 META-INF/spring.components 文件。在編譯時,源模型是自包含的,JPA 實體和 Spring 組件是已被標記的。

    • 從索引讀取實體而不是掃描類路徑對于小于 200 個類的小型項目是沒有明顯差異。但對大型項目影響較大。加載組件索引開銷更低。因此,隨著類數的增加,索引讀取的啟動時間將保持不變。

    • 加載組件索引的耗費是廉價的。因此當類的數量不斷增長,加上構建索引的啟動時間仍然可以維持一個常數, 不過對于組件掃描而言,啟動時間則會有明顯的增長。

    • 這個對于處于大型 Spring 項目的開發者所意味著的,是應用程序的啟動時間將被大大縮減。雖然 20或者 30 秒鐘看似沒什么,但如果每天要這樣登上好幾百次,加起來就夠你受的了。使用了組件索引的話,就能幫助你每天過的更加高效。

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

    3 JetBrains Kotlin 語言支持

    Kolin概述:是一種支持函數式編程編程風格的面向對象語言。Kotlin 運行在 JVM 之上,但運行環境并不限于 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 發行版本的一個激動人心的特性就是新的響應式堆棧 WEB 框架。這個堆棧完全的響應式且非阻塞,適合于事件循環風格的處理,可以進行少量線程的擴展。

    • Reactive Streams 是來自于 Netflix, Pivotal, Typesafe, Red Hat, Oracle, Twitter 以及Spray.io 的工程師特地開發的一個 API。它為響應式編程實現的實現提供一個公共的 API,好實現Hibernate 的 JPA。這里 JPA 就是這個 API, 而 Hibernate 就是實現。

    • Reactive Streams API 是 Java 9 的官方版本的一部分。在 Java 8 中, 你會需要專門引入依賴來使用 Reactive Streams API。

    • Spring Framework 5.0 對于流式處理的支持依賴于 Project Reactor 來構建, 其專門實現了Reactive Streams API。

    • Spring Framework 5.0 擁有一個新的 spring-webflux 模塊,支持響應式 HTTP 和 WebSocket 客戶端。

    • Spring Framework 5.0 還提供了對于運行于服務器之上,包含了 REST, HTML, 以及 WebSocket 風格交互的響應式網頁應用程序的支持。

    • 在 spring-webflux 中包含了兩種獨立的服務端編程模型:

      • 基于注解:使用到了@Controller 以及 Spring MVC 的其它一些注解;

      • 使用 Java 8 lambda 表達式的函數式風格的路由和處理。

      • 有 了 Spring Webflux, 你現在可以創建出 WebClient, 它是響應式且非阻塞的,可以作為RestTemplate 的一個替代方案。

    • 這里有一個使用 Spring 5.0 的 REST 端點的 WebClient 實現:

    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 現在還引入了支持 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的新特性有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    棋牌| 北海市| 酉阳| 安国市| 昌邑市| 怀远县| 楚雄市| 瑞丽市| 嘉黎县| 云龙县| 顺昌县| 新平| 晋宁县| 沐川县| 上栗县| 博客| 澄迈县| 普兰店市| 资讯| 阿克陶县| 和林格尔县| 临沂市| 云阳县| 怀仁县| 团风县| 渝中区| 景洪市| 鄂伦春自治旗| 炉霍县| 连平县| 日喀则市| 香港| 梁河县| 吉木萨尔县| 涿鹿县| 金门县| 大连市| 晴隆县| 灵山县| 西乌珠穆沁旗| 诏安县|