从版本 5.1 开始,Spring Integration 为包中的接口提供直接支持。 所有消息传递端点(Service Activator、Transformer、Filter 等)现在都可以引用(或)bean。 消息注释可以直接应用于这些 bean,类似于常规定义。 例如,如果您有此 Bean 定义:java.util.functionFunctionConsumerMessageHandlerFunctionSpring中文文档

@Configuration
public class FunctionConfiguration {

    @Bean
    public Function<String, String> functionAsService() {
        return String::toUpperCase;
    }

}

您可以将其用作 XML 配置文件中的简单引用:Spring中文文档

<service-activator input-channel="processorViaFunctionChannel" ref="functionAsService"/>

当我们使用 Messaging Annotations 配置流程时,代码很简单:Spring中文文档

@Bean
@Transformer(inputChannel = "functionServiceChannel")
public Function<String, String> functionAsService() {
    return String::toUpperCase;
}

当函数返回一个数组(本质上是任何)或 Reactor 时,可以在这样的 Bean 上使用,以对结果内容执行迭代。CollectionIterableStreamFlux@SplitterSpring中文文档

该接口可用于 或 与注释一起执行流程的最后一步:java.util.function.Consumer<int:outbound-channel-adapter>@ServiceActivatorSpring中文文档

@Bean
@ServiceActivator(inputChannel = "messageConsumerServiceChannel")
public Consumer<Message<?>> messageConsumerAsService() {
    // Has to be an anonymous class for proper type inference
    return new Consumer<Message<?>>() {

        @Override
        public void accept(Message<?> e) {
            collector().add(e);
        }

    };
}

另外,请注意上面代码片段中的注释:如果您想在 / 中处理整个消息,则不能使用 lambda 定义。 由于 Java 类型擦除,我们无法确定方法调用的目标类型。FunctionConsumerapply()/accept()Spring中文文档

该接口可以简单地与注释一起使用,也可以作为:java.util.function.Supplier@InboundChannelAdapterref<int:inbound-channel-adapter>Spring中文文档

@Bean
@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000"))
public Supplier<String> pojoSupplier() {
    return () -> "foo";
}

对于 Java DSL,我们只需要在端点定义中使用对函数 Bean 的引用。 同时,接口的实现可以用作常规定义:SupplierMessageSourceSpring中文文档

@Bean
public Function<String, String> toUpperCaseFunction() {
    return String::toUpperCase;
}

@Bean
public Supplier<String> stringSupplier() {
    return () -> "foo";
}

@Bean
public IntegrationFlow supplierFlow() {
    return IntegrationFlow.from(stringSupplier())
                .transform(toUpperCaseFunction())
                .channel("suppliedChannel")
                .get();
}

当与Spring Cloud Function框架一起使用时,此函数支持非常有用,在Spring Cloud Function框架中,我们有一个函数目录,可以从集成流定义中引用其成员函数。Spring中文文档