随着 Micronaut 1.0.1 的发布,OCI的Micronaut团队很高兴地宣布推出 Micronaut for Spring 1.0 M1 。
Micronaut for Spring增加了使用历史悠久的基于Spring注释的编程模型来构建与Micronaut和Spring一起使用的Micronaut应用程序和库的能力。
提供的 示例应用程序 在源级别是Spring Boot应用程序。使用提前(AOT)编译,Micronaut能够计算和解释Spring注释编程模型,并生成有效的Micronaut应用程序,而不会增加任何运行时开销。然后,可以在GraalVM上执行Micronaut应用程序。
Micronaut有一组注释,在运行时用于实现框架。Spring有另一套可以简单地映射到Micronaut的注释上。您可以将这些注释视为源代码级域特定语言(DSL)。
在编译时,解释注释元数据并将Spring注释映射到等效的Micronaut注释元数据,就像这样,Micronaut可以运行Spring应用程序。
请注意,只支持Spring的一个子集,但它足以构建真正的应用程序和库,无论它们是否包含在Spring Boot应用程序或Micronaut应用程序中。
支持Spring Boot的好处
尽管在应用程序依赖项中包含Spring对于Micronaut开发人员来说有一些缺点(特别是JAR大小从13MB增加到29MB),但使用Spring注释编程模型也有一些有趣的好处,包括:
请注意,如果您的源代码仅引用Spring注释而不是Spring接口,则Spring实际上可以是“仅编译”依赖项,这会将JAR大小缩减回13MB并带来上述所有好处。
对于Spring开发者好处
对于Spring开发人员来说,好处也很多。
由于性能或内存消耗限制,Micronaut能够采用以前从未能够实现的Spring编程模型:
如上所述,使用Micronaut for Spring,现在技术上也可以编写Spring Boot,Micronaut和Grails的Spring Boot自动配置。Pivotal的Spring团队甚至可以使用这个库,并使用Spring Boot或Micronaut 进行大量的spring-boot-autoconfigure。
这样做的方式是Spring Boot在运行时计算自动配置,而如果编译时元数据在那里,Micronaut会自动加载它而不需要额外的运行时计算。
由于Micronaut也可以用作Spring Boot的父应用程序上下文,因此Spring Boot的核心甚至可以更新为使用Micronaut进行内部连接,并为Spring Boot带来GraalVM兼容性。如果Pivotal开发人员感兴趣, 我们很乐意聊天 。
GRAILS开发人员有什么用?
我们为Spring开发Micronaut的主要原因实际上是Grails 4.0。
我已经开始研究Grails 4.0,作为规划的一部分,我们希望Grails开发人员能够从我们在过去一年中对Micronaut的投资中获益。
在Grails 4.0中,Micronaut将接替Grails应用程序的父上下文,Grails的大部分内部连接将基于Micronaut而不是Spring,这样我们就可以减少内存消耗并缩短启动时间。结合Spring团队在Spring Boot 2.1中所做的改进,将在内存消耗和启动时间方面对Grails 4.x应用程序进行重大改进。
由于Micronaut将成为Grails 4.0应用程序的父上下文,这也意味着我们为Micronaut开发的每个功能都可以在Grails 4.0应用程序中使用,从编译时客户端(如 HTTP客户端 和 Kafka客户端 )到服务等功能发现和客户端负载平衡。
与MICROPROFILE关系
我很高兴与参与 MicroProfile的 一些人聊天,虽然项目的目标很有趣,但任何基于通过反射注释的运行时分析的模型都会遭遇内存消耗问题,因此我对目前的实施性能表示怀疑。。
说到这一点,并且已经阅读了规范,Micronaut能够使用AOT在编译时支持任何注释集,这意味着Micronaut可以使用与Micronaut for Spring相同的方法在技术上支持MicroProfile。
换句话说,没有理由通过映射注释和提供一些接口桥来实现基于JAX-RS / CDI的MicroProfile实现。
总结
当我今年早些时候在Greach首次推出Micronaut时,我提到Micronaut不仅仅是另一个HTTP服务器实现(用Java编写的新HTTP服务器似乎每周都会出现在Github上!)。Micronaut有可能彻底改变典型Spring和/或Jakarta EE应用程序的运行时特性,同时保留开发人员熟悉和喜爱的大部分功能集,从而彻底改变JVM应用程序的构建方式。
通过使JVM用户可以访问AOT并跨语言(目前是Java,Kotlin和Groovy)实现AOT的兼容性,Micronaut能够将源代码与运行时环境分离,就像之前没有其他框架一样。