DSL およびエンドポイントの構成

すべての IntegrationFlowBuilder EIP メソッドには、AbstractEndpoint インスタンスのオプションを提供するためにラムダパラメーターを適用するバリアントがあります: SmartLifecyclePollerMetadatarequest-handler-advice-chain など。それぞれに汎用引数があるため、次の例に示すように、コンテキストでエンドポイントとその MessageHandler を構成できます。

@Bean
public IntegrationFlow flow2() {
    return IntegrationFlow.from(this.inputChannel)
                .transformWith(t -> t
                              .transformer(new PayloadSerializingTransformer())
                              .autoStartup(false)
                              .id("payloadSerializingTransformer"))
                .transformWith(t -> t
                              .transformer((Integer p) -> p * 2)
                              .advice(expressionAdvice()))
                .get();
}

さらに、EndpointSpec は id() メソッドを提供し、エンドポイント Bean を、生成された名前ではなく、指定された Bean 名で登録できるようにします。

MessageHandler が Bean として参照されている場合、.advice() メソッドが DSL 定義に存在する場合、既存の adviceChain 構成はオーバーライドされます。

@Bean
public TcpOutboundGateway tcpOut() {
    TcpOutboundGateway gateway = new TcpOutboundGateway();
    gateway.setConnectionFactory(cf());
    gateway.setAdviceChain(Collections.singletonList(fooAdvice()));
    return gateway;
}

@Bean
public IntegrationFlow clientTcpFlow() {
    return f -> f
        .handle(tcpOut(), e -> e.advice(testAdvice()))
        .transform(Transformers.objectToString());
}

これらはマージされず、この場合は testAdvice() Bean のみが使用されます。