Java DSL

Spring Integration Java 構成および DSL は、Spring @Configuration クラスから Spring Integration メッセージフローを構成できる便利なビルダーと流れるような API のセットを提供します。

Kotlin DSL も参照してください)

Groovy DSL も参照してください)

Spring Integration の Java DSL は、本質的に Spring Integration のファサードです。DSL は、Spring Framework および Spring Integration からの既存の Java 構成とともに、流れるような Builder パターンを使用することにより、Spring Integration メッセージフローをアプリケーションに埋め込む簡単な方法を提供します。また、ラムダ(Java 8 で使用可能)を使用およびサポートして、Java 構成をさらに簡素化します。

カフェ [GitHub] (英語) は DSL を使用する良い例です。

DSL は IntegrationFlow fluent API によって提供されます (IntegrationFlowBuilder を参照)。これにより、Spring Bean として (@Bean アノテーションを使用して) 登録する必要がある IntegrationFlow コンポーネントが生成されます。ビルダーパターンは、引数としてラムダを受け入れることができるメソッドの階層として、任意の複雑な構造を表現するために使用されます。

IntegrationFlowBuilder は、IntegrationFlowBeanPostProcessor によるアプリケーションコンテキストでの具象 Bean のさらなる解析と登録のために、IntegrationFlow Bean の統合コンポーネント(MessageChannel インスタンス、AbstractEndpoint インスタンスなど)のみを収集します。

Java DSL は Spring Integration クラスを直接使用し、XML の生成と解析をバイパスします。ただし、DSL は XML に加えて構文上の砂糖以上のものを提供します。その最も魅力的な機能の 1 つは、インラインラムダを定義してエンドポイントロジックを実装する機能であり、カスタムロジックを実装するための外部クラスは不要です。ある意味では、Spring Integration の Spring Expression Language(SpEL)およびインラインスクリプトのサポートがこれに対処していますが、ラムダはより簡単で強力です。

次の例は、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 構成の置き換えと拡張の両方に使用できます。Java 構成を使用するために、既存の XML 構成をすべて置き換える必要はありません。