Spring Integration Groovy DSL 介绍

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

Spring 社区,新年快乐!

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

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

现在我很高兴向您介绍全新的 Spring Integration Groovy DSL。您可能听说过我们之前的尝试在 Spring Integration XML 支持之上制作 Groovy DSL。但是该解决方案非常笨拙(特别是对于协议特定的通道适配器),并且支持负担急剧增加。我最新的实现完全基于已经成熟的 Java DSL 及其构建器模式支持。

拥有 10 年 Gradle 经验后,我认为我可以轻松地准备一些扩展 IntegrationFlowDefinition 并公开 Groovy 构建器样式的定义。事实证明,仅仅使用一种语言并在其之上设计 DSL 是不同的任务,我必须从头开始学习相应的 Groovy 方面。Vladimír Oraný 的一系列博客文章为我提供了很好的信息来源,说明应该使用什么以及如何做才能使最终用户在使用 Groovy DSL 方面获得最佳体验。

包括现有的 Spring Integration 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 Integration 5.5.8 版本(预计在一月中旬)还包括一个 @IntegrationDsl 标记注释。

您可以在项目 README 和相应的 Spock 测试中找到更多示例。 如果项目成熟,最终可能会直接进入 spring-integration-core。我们也可以覆盖那些 IntegrationGroovyDslGroovyIntegrationFlowDefinition Groovy 类为 Java(无论如何,它只是一个 DSL API!),但是我相信 @CompileStatic Groovy 功能应该足以优化最终编译的字节码。

尝试一下,欢迎任何反馈!

干杯, 
Artem

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

取得领先

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部