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 表达式更简单、功能更强大。

以下示例展示了如何将 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 配置。