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 配置。
cafe提供了一个很好的 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 表达式语言 (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 配置。你无需替换现有的所有 XML 配置即可使用 Java 配置。