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 社群中所有即將舉行的活動。

檢視全部