DSL およびエンドポイントの構成
すべての IntegrationFlowBuilder
EIP メソッドには、AbstractEndpoint
インスタンスのオプションを提供するためにラムダパラメーターを適用するバリアントがあります: SmartLifecycle
、PollerMetadata
、request-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 のみが使用されます。