|
如需使用最新稳定版本,请使用 Spring Integration 7.0.4! |
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 配置。
The cafe 提供了使用 DSL 的一个良好示例。
该 DSL 由 IntegrationFlow 流畅 API 提供(参见 IntegrationFlowBuilder)。
这会生成 IntegrationFlow 组件,应将其注册为 Spring Bean(通过使用 @Bean 注解)。
构建器模式用于将任意复杂的结构表达为可接受 Lambda 表达式作为参数的方法层级。
The IntegrationFlowBuilder 仅收集集成组件(MessageChannel 实例、AbstractEndpoint 实例等)到 IntegrationFlow Bean 中,以便由 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 配置。