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 表达式语言 (SpEL) 和内联脚本的支持解决了这个问题,但 lambda 表达式更容易且功能更强大。
以下示例演示了如何将 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 配置。