Spring 集成 Groovy DSL 简介

工程 | Artem Bilan | 2022年1月6日 | ...

新年快乐,Spring 社区!

希望你们度过了一个愉快的假期,并准备好迎接我们面前的新兴奋。

在圣诞假期休息和充电后,我决定向我最喜欢的语言——Groovy——致敬。

现在,我很高兴向你们介绍一个全新的 Spring 集成 Groovy DSL。你们可能听说过我们之前的尝试,它是在 Spring 集成 XML 支持之上创建一个 Groovy DSL。但是这个解决方案非常繁琐(特别是对于协议特定的通道适配器),并且支持负担也大大增加。我的最新实现完全基于已经成熟的 Java DSL 及其构建器模式支持。

拥有十年 Gradle 经验,我认为为我快速准备一些东西应该很容易,它只是扩展了IntegrationFlowDefinition并公开了用于定义的 Groovy 构建器样式。事实证明,仅仅使用一种语言和在它之上设计 DSL 是不同的任务,我不得不从头开始学习相关的 Groovy 方面。Vladimír Oraný 的一系列博客文章给了我一个很好的信息来源,说明应该使用什么以及如何使用它才能使 Groovy DSL 的最终用户体验尽可能好。

包括现有Spring 集成 Kotlin DSL的当前成功,到目前为止,我已经编写了几个 Groovy 类。IntegrationGroovyDsl作为static integrationFlow()方法的工厂,导入到目标项目中,并委托给众所周知的IntegrationFlows.from()工厂。GroovyIntegrationFlowDefinition作为IntegrationFlowDefinition委托的包装器。这两个类都大量利用了 Groovy 的一等公民——groovy.lang.Closure,以及@DelegatesTo@ClosureParams特性来支持 IDE 建议和自动完成。

因此,您只需要一个org.springframework.integration:spring-integration-groovy-dsl:0.0.1依赖项,添加一个import static org.springframework.integration.dsl.IntegrationGroovyDsl.integrationFlow并开始以简洁的 Groovy 风格编写您的IntegrationFlow bean。这就是它在我 IntelliJ IDEA 中目前的样子。

Groovy DSL in IDEA

注意

在学习了@DelegatesTo@ClosureParams之后,我意识到 Kotlin 也提供了一个很好的特性来改善 IDE 体验。因此,下一个 Spring 集成5.5.8版本(预计在一月中旬发布)也包含一个@IntegrationDsl标记注解。

您可以在项目README和相应的Spock 测试中找到更多示例。如果项目成熟,最终它可能会直接进入spring-integration-core。我们也可以将这些IntegrationGroovyDslGroovyIntegrationFlowDefinitionGroovy 类重写为 Java(它只是一个 DSL API!),但是我相信@CompileStaticGroovy 特性足以最终优化编译后的字节码。

试一试,欢迎任何反馈!

此致,
Artem

项目页面 | GitHub 问题 | 贡献 | 帮助 | 聊天

获取 Spring 新闻通讯

随时关注 Spring 新闻通讯

订阅

领先一步

VMware 提供培训和认证,以加速您的进步。

了解更多

获得支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看全部