Spring Native 0.10.0 发布

827

官方已经宣布了 Spring Native 0.10.0的发布。它基于Spring Boot 2.5GraalVM 21.1

这个版本有很多特性,亮点包括:

  • 引入了本地测试。
  • 来自GraalVM团队的一个新的官方Gradle插件。
  • 引入了一个可以用于类的时间提前代理。

它还包括43个错误修复、文档改进和依赖性升级

本地测试和Gradle插件

官方一直在与GraalVM团队合作来改进本地图像在构建插件方面的水平。新的本地构建工具取代了以前的native-image-maven-plugin,允许使用本地native-image编译器来构建和测试你的本地应用程序。

以前只支持Maven,但现在Maven和Gradle插件都可以使用。如果想升级,新的Maven插件坐标为org.graalvm.buildtools:native-maven-plugin:0.9.0。在配置本地构建工具插件之后,可以使用mvn -Pnative -DskipTests包gradle nativeBuild来构建你的应用程序。但也可以用mvn -Pnative testgradle nativeTest将你的JUnit 5测试作为一个本地镜像运行。Spring Native本身已经升级,增加了对初始测试的支持,所以你的@SpringBootTest将作为一个本地镜像运行。这对于原生Spring Boot应用,以及包括Spring本身在内的JVM生态系统都有重要意义,它们现在可以使用这些官方插件来提高原生支持的质量和可维护性。

start.spring.io已经更新,除了对Buildpacks的本地支持外,还配置了开箱即用的本地构建工具。

可以在类上使用时间提前的代理

对于本地图像,代理需要在构建时定义。到目前为止,Spring Native只支持JDK代理,只支持在接口上使用。不支持通常在JVM上通过CGLIB代理处理的类的代理,因为本地世界不支持在运行时生成字节码。

// 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!";
    }
}

但是从0.10开始,由于Andy Clement的努力,类上的代理现在可以在构建时通过@AotProxyHint注解生成。请注意,为了避免混淆,以前的@ProxyHint已经改名为@JdkProxyHint

它允许在类上支持安全、事务和其他广泛的基于代理的机制。官方将完善这种模式的自动检测,以减少所需的显式提示的数量。

下一步:功能配置的AOT转换

基于在Spring FuSpring Init实验项目中的工作,官方即将发布的0.11版将专注于引入功能配置AOT转换,来大幅减少Spring配置基础设施中的反射量。目标是将Spring配置转换为本地图像静态分析能够理解的方式,即开即用。这应该既能优化内存占用,又能提高Spring应用程序的本地兼容性。

原文链接:spring.io/blog/2021/0…