此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1spring-doc.cadn.net.cn

DSL 和终结点配置

IntegrationFlowBuilderEIP 方法有一个变体,它应用 lambda 参数来提供选项AbstractEndpoint实例:SmartLifecycle,PollerMetadata,request-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 名称注册端点 Bean。spring-doc.cadn.net.cn

如果MessageHandler被引用为 bean,则任何现有的adviceChain如果.advice()方法存在于 DSL 定义中: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