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 更容易且功能更强大。

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