Java DSL

Spring Integration 的 Java 配置和 DSL 提供了一系列方便的構建器和流暢的 API,讓你能夠透過 Spring @Configuration 類來配置 Spring Integration 訊息流。

(另請參閱 Kotlin DSL。)

(另請參閱 Groovy DSL。)

Spring Integration 的 Java DSL 本質上是 Spring Integration 的一個門面。DSL 提供了一種簡單的方式,透過使用流暢的 Builder 模式以及 Spring Framework 和 Spring Integration 現有的 Java 配置,將 Spring Integration 訊息流嵌入到你的應用程式中。我們還使用並支援 lambdas(Java 8 提供)來進一步簡化 Java 配置。

cafe 提供了使用 DSL 的一個很好的例子。

DSL 透過 IntegrationFlow 流暢 API(參見 IntegrationFlowBuilder)呈現。這會生成 IntegrationFlow 元件,該元件應註冊為 Spring bean(透過使用 @Bean 註解)。構建器模式用於將任意複雜的結構表示為可以接受 lambdas 作為引數的方法層次結構。

IntegrationFlowBuilder 僅收集 IntegrationFlow bean 中的整合元件(例如 MessageChannel 例項、AbstractEndpoint 例項等),以便後續由 IntegrationFlowBeanPostProcessor 在應用程式上下文中解析和註冊具體的 bean。

Java DSL 直接使用 Spring Integration 類,繞過了任何 XML 生成和解析。然而,DSL 不僅僅是 XML 之上的語法糖。它最引人注目的特性之一是能夠定義內聯 lambdas 來實現端點邏輯,從而消除了需要外部類來實現自定義邏輯的需求。從某種意義上說,Spring Integration 對 Spring Expression Language (SpEL) 和內聯指令碼的支援解決了這個問題,但 lambdas 更易用且功能強大得多。

以下示例展示瞭如何使用 Java 配置來配置 Spring Integration

@Configuration
@EnableIntegration
public class MyConfiguration {

    @Bean
    public AtomicInteger integerSource() {
        return new AtomicInteger();
    }

    @Bean
    public IntegrationFlow myFlow(AtomicInteger integerSource) {
        return IntegrationFlow.fromSupplier(integerSource::getAndIncrement,
                                         c -> c.poller(Pollers.fixedRate(100)))
                    .channel("inputChannel")
                    .filter((Integer p) -> p > 0)
                    .transform(Object::toString)
                    .channel(MessageChannels.queue())
                    .get();
    }
}

上述配置示例的結果是,在 ApplicationContext 啟動後,它建立了 Spring Integration 的端點和訊息通道。Java 配置可以用於替換和增強 XML 配置。你無需替換所有現有的 XML 配置即可使用 Java 配置。