Spring Native 0.10.0 釋出,重大突破

大家好,我是你們的碼農大哥——棧長。

6 月初的時候給大家介紹了 Spring 團隊的最新殺手鐧專案:Spring Native,它的存在就是幹掉 JVM,另起一個 JVM 之外的生態,上篇也簡單實戰了一下,相信大家都有了一個全新的認知,沒看過的可以點連結進去看下。

Spring Native 上一個版本為:0。9。2,只支援 Spring Boot 2。4。5。

Spring Native 最近又釋出了基於 Spring Boot 2。5 和 GraalVM 21。1 的最新 0。10。0 版本:

Spring Native 0.10.0 釋出,重大突破

Spring Boot 前陣子剛升級到 Spring Boot 2。5。1,Spring Native 現在就開始支援 Spring Boot 2。5,支援進度真快,對研究 Spring Native 的同學也是福音了。。

Spring Native 0.10.0 帶來了一些新特性,還包括 43 個 bug 修復、文件改進、依賴升級等。

Spring Native 0。10。0 新特性

1、支援 Gradle 外掛

以前僅提供 Maven 外掛支援,現在終於可以支援官方 Gradle 外掛了。

並且,還提供了新的構建工具(native-build-tools):

https://github。com/graalvm/native-build-tools

它取代了之前的

native-image-maven-plugin

外掛,它可以透過本地原生映象編譯器來構建和測試你的原生應用。

這個升級就感覺有點大,意味著之前那個外掛的玩法就行不通了,需要用這個新的構建工具外掛。。

2、支援原生測試

現在可以使用

mvn -Pnative test

gradle nativeTest

以原生映象的方式執行 JUnit 5 單元測試用例。

另外,Spring Native 現在也添加了單元測試初始化支援,因此以

@SpringBootTest

編寫的單元測試用例也可以作為原生映象執行。Spring Boot 單元測試不清楚的,可以關注Java技術棧,看看棧長寫的教程。

3、支援基於類的代理

我們都知道,原生映象需要在構建時就定義代理,在前面的 Spring Native 版本中,Spring Native 也只能支援基於介面的 JDK 代理,不支援透過 CGLIB 基於普通類的代理,因為 Spring Native 的原生特性就不能支援在執行時生成位元組碼。

// Typical security use case of a class proxy now supported on native@Servicepublic class GreetingService { public String hello() { return “Hello!”; } @PreAuthorize(“hasRole(‘ADMIN’)”) public String adminHello() { return “Goodbye!”; }}

但是從 Spring Native 0。10。0 這個版本開始,基於普通類的代理也可以搞定了,現在可以在構建時透過

@AotProxyHint

註解來生成類的代理,這真是一個大的突破,牛皮!!!

需要注意的是:

以前的 @ProxyHint 已重新命名為 @JdkProxyHint,以避免混淆。

它支援安全性、事務、以及其他基於普通類的代理機制,後續也將改進對此類模式的自動檢測,以減少大量所需的顯示提示。

總結

本文介紹了 Spring Native 0。10。0 的 3 個重要的核心特性,每個都是重磅,可以看出 Spring Native 還處於快速的更新迭代中。

更多釋出的細節可以參考:

https://github。com/spring-projects-experimental/spring-native/releases

快速開啟 Spring Native:

https://start。spring。io/

Spring Native 0.10.0 釋出,重大突破

如圖所示,Spring Native 目前還屬於體驗專案,但它無需 JVM,有更快的效能、更少的資源佔用,這肯定是未來的趨勢,有興趣的可以研究下,有不清楚的可以看看棧長的 Spring Native 實戰,原始碼已經上傳:

https://github。com/javastacks/javastack

棧長有時間也會繼續研究分享 Spring Native 動態及教程,關注Java技術棧第一時間推送,請大家持續關注哦!

最後,覺得我的文章對你用收穫的話,動動小手,給個在看、轉發,原創不易,棧長需要你的鼓勵。

參考資料:

https://spring。io/blog/2021/06/14/spring-native-0-10-0-available-now

https://github。com/spring-projects-experimental/spring-native

版權申明:本文系 “Java技術棧” 原創,原創實屬不易,轉載、引用本文內容請註明出處,禁止抄襲、洗稿,請自重,尊重大家的勞動成果和智慧財產權,抄襲必究。