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 訊息流嵌入到應用程式中的簡單方法。我們還使用並支援 Lambda 表示式(Java 8 中可用)來進一步簡化 Java 配置。
咖啡館提供了一個使用 DSL 的好例子。
DSL 由 IntegrationFlow 流暢 API(參見 IntegrationFlowBuilder)表示。這會生成 IntegrationFlow 元件,該元件應註冊為 Spring bean(透過使用 @Bean 註解)。構建器模式用於將任意複雜的結構表示為方法層次結構,這些方法可以接受 Lambda 表示式作為引數。
IntegrationFlowBuilder 僅在 IntegrationFlow bean 中收集整合元件(MessageChannel 例項、AbstractEndpoint 例項等),以便 IntegrationFlowBeanPostProcessor 進一步解析和註冊應用程式上下文中的具體 bean。
Java DSL 直接使用 Spring Integration 類,繞過任何 XML 生成和解析。然而,DSL 提供的不只是 XML 之上的語法糖。其最引人注目的功能之一是能夠定義內聯 Lambda 表示式來實現端點邏輯,從而無需外部類來實現自定義邏輯。在某種意義上,Spring Integration 對 Spring Expression Language (SpEL) 和內聯指令碼的支援解決了這個問題,但 Lambda 表示式更簡單且功能更強大。
以下示例展示瞭如何使用 Spring Integration 的 Java 配置
@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 配置。