如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

DSL 和端点配置

所有 IntegrationFlowBuilder EIP 方法都有一个变体,可将 lambda 参数应用于为 AbstractEndpoint 实例提供选项:SmartLifecyclePollerMetadatarequest-handler-advice-chain 等。 它们都具有泛型参数,因此您可以在上下文中配置端点甚至其 MessageHandler,如下示例所示:spring-doc.cadn.net.cn

@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,而不是使用生成的名称。spring-doc.cadn.net.cn

如果 MessageHandler 被引用为 Bean,那么如果 DSL 定义中存在 .advice() 方法,则任何现有的 adviceChain 配置都将被覆盖:spring-doc.cadn.net.cn

@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。spring-doc.cadn.net.cn