如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

Java DSL

Spring Integration Java 配置和 DSL 提供了一组便捷的构建器和流畅的 API,使您能够从 Spring @Configuration 类配置 Spring Integration 消息流。spring-doc.cadn.net.cn

Spring Integration 的 Java DSL 本质上是 Spring Integration 的门面。 该 DSL 提供了一种简单的方法,通过使用流式 Builder 模式以及现有的 Spring Framework 和 Spring Integration Java 配置,将 Spring Integration 消息流嵌入到您的应用程序中。 我们还使用并支持 Lambda(需 Java 8 及以上版本),以进一步简化 Java 配置。spring-doc.cadn.net.cn

The cafe 提供了使用 DSL 的一个良好示例。spring-doc.cadn.net.cn

该 DSL 由 IntegrationFlow 流畅 API 提供(参见 IntegrationFlowBuilder)。 这会生成 IntegrationFlow 组件,应将其注册为 Spring Bean(通过使用 @Bean 注解)。 构建器模式用于将任意复杂的结构表达为可接受 Lambda 表达式作为参数的方法层级。spring-doc.cadn.net.cn

The IntegrationFlowBuilder 仅收集集成组件(MessageChannel 实例、AbstractEndpoint 实例等)到 IntegrationFlow Bean 中,以便由 IntegrationFlowBeanPostProcessor 进一步解析并在应用上下文中注册具体的 Bean。spring-doc.cadn.net.cn

Java DSL 直接使用 Spring Integration 类,绕过了任何 XML 的生成和解析。 然而,DSL 提供的不仅仅是基于 XML 的语法糖。 其最引人注目的功能之一是能够定义内联 Lambda 表达式来实现端点逻辑,从而消除了为自定义逻辑创建外部类的需求。 从某种意义上说,Spring Integration 对 Spring 表达式语言 (SpEL) 和内联脚本的支持可以解决这一问题,但 Lambda 表达式更简单且功能强大得多。spring-doc.cadn.net.cn

以下示例展示了如何在 Spring Integration 中使用 Java 配置:spring-doc.cadn.net.cn

@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 配置。spring-doc.cadn.net.cn