领先一步
VMware 提供培训和认证,助您加速进步。
了解更多新年快乐,Spring 社区!
希望你们度过了愉快的假期,并准备好迎接未来的新精彩。
在圣诞假期休息和充电后,我决定向我曾经最喜欢的语言——Groovy 致敬。
现在,我很荣幸地向您介绍一款全新的 Spring Integration Groovy DSL。您可能听说过我们之前尝试过的 创建基于 Spring Integration XML 支持的 Groovy DSL 的旧方法。但该解决方案相当繁琐(尤其是对于特定协议的通道适配器),并且支持负担也呈指数级增长。我最新的实现完全基于已经成熟的 Java DSL 及其构建器模式支持。
凭借在 Gradle 方面 10 年的经验,我曾以为我可以轻松快速地准备一个简单地扩展 IntegrationFlowDefinition 并暴露 Groovy 构建器风格定义的功能。事实证明,仅仅使用一门语言和在其之上构建 DSL 是不同的任务,我不得不从零开始学习相关的 Groovy 方面知识。Vladimir 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 中的样子:
注意
在学习了那些 @DelegatesTo 和 @ClosureParams 之后,我意识到 Kotlin 也提供了一个很好的功能来改善 IDE 体验。因此,下一个 Spring Integration 版本 5.5.8(预计在 1 月中旬发布)还将包含一个 @IntegrationDsl 标记注解。
您可以在项目的 README 和相应的 Spock 测试 中找到更多示例。如果项目成熟,最终可能会直接进入 spring-integration-core。我们也可以将这些 IntegrationGroovyDsl 和 GroovyIntegrationFlowDefinition Groovy 类覆盖为 Java(反正它只是一个 DSL API!),但我相信 @CompileStatic Groovy 功能应该足以最终优化编译后的字节码。
不妨试试,任何反馈都欢迎!
祝好,
Artem