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 配置。