Spring Native 0.10.0 发布,重大突破

createh52周前 (12-12)技术教程16

大家好,我是你们的码农大哥——栈长。

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 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 testgradle 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
@Service
public 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 目前还属于体验项目,但它无需 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技术栈” 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重大家的劳动成果和知识产权,抄袭必究。

相关文章

干货|SpringBoot集成极光推送完整实现代码(建议收藏)

工作中经常会遇到服务器向App推送消息的需求,一般企业中选择用极光推送的比较多,在集成极光时发现极光的文档并不完整,网上的文章也很多不能直接使用,这里列出我在工作中集成极光的全部代码,只需要按照如下代...

WebSocket在Java Spring Boot+Vue框架中实现消息推送功能

在现代Web应用中,实时消息提醒是一项非常重要的功能,能够极大地提升用户体验。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为实现实时消息提醒提供了高效且低延迟的解决方案。本文将详...

SpringBoot 如何实现消息自动推送机制?

在实际开发过程中,实现消息自动推送机制的方式有很多种,比较常见的方式有如下几种,WebSocket、SSE(Server-Sent Events)、消息队列(如 RabbitMQ、Kafka)等,下面...

一文带你彻底搞懂Redis实现消息的订阅发布

前言Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接受消息。Redis客户端可以订阅任意数量的频道!一、实现订阅发布功能①命令:这些命令被广泛用于构...

JAVA后端推送企业微信消息到普通微信

接收消息的用户不需要安装企业微信,普通微信就可以。特殊情况开发者需要推送某些即时消息到普通微信端的时候可用,支持推送文字,图文,视频,文件,markdown,及模板等消息# 1.申请注册企业微信(目前...

强大 WebView2 + 不用写 JavaScript 的 htmx.js 「小轻快」开发桌面程序

WebView2 是越来越香了。WebView2 不但是 Win11 自带的系统组件,Win10 也已经自动推送安装。即使是少量没有安装 WebView2 的系统 —— 使用 aardio 中的 we...