Java DSL

Spring 集成 Java 配置和 DSL 提供了一组方便的构建器和一个流畅的 API,允许您配置来自 Spring 的 Spring 集成消息流@Configuration类。spring-doc.cadn.net.cn

用于 Spring Integration 的 Java DSL 本质上是 Spring Integration 的门面。 DSL 提供了一种简单的方法,通过使用 Fluent 将 Spring 集成消息流嵌入到你的应用程序中Builder模式与 Spring Framework 和 Spring Integration 中的现有 Java 配置一起运行。 我们还使用并支持 lambda(在 Java 8 中提供)来进一步简化 Java 配置。spring-doc.cadn.net.cn

这家咖啡馆提供了使用 DSL 的一个很好的例子。spring-doc.cadn.net.cn

DSL 由IntegrationFlowFluent API(请参阅IntegrationFlowBuilder). 这将生成IntegrationFlow组件,该组件应注册为 Spring Bean(通过使用@Bean注释)。 构建器模式用于将任意复杂的结构表示为可以接受 lambda 作为参数的方法层次结构。spring-doc.cadn.net.cn

IntegrationFlowBuilder仅收集集成组件 (MessageChannel实例AbstractEndpoint实例,依此类推),在IntegrationFlowbean 在应用程序上下文中进一步解析和注册具体 bean 的IntegrationFlowBeanPostProcessor.spring-doc.cadn.net.cn

Java DSL 直接使用 Spring 集成类,并绕过任何 XML 生成和解析。 然而,DSL 在 XML 之上提供的不仅仅是语法糖。 它最引人注目的功能之一是能够定义内联 lambda 来实现终端节点逻辑,无需外部类来实现自定义逻辑。 从某种意义上说,Spring 集成对 Spring 表达式语言 (SpEL) 和内联脚本的支持解决了这个问题,但 lambda 更简单、功能更强大。spring-doc.cadn.net.cn

下面的示例展示了如何使用 Java 配置进行 Spring 集成: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 集成端点和消息通道。 Java 配置可用于替换和增强 XML 配置。 您无需替换所有现有的 XML 配置即可使用 Java 配置。spring-doc.cadn.net.cn