java.util.function接口支持
从版本 5.1 开始, Spring 集成为java.util.function包。
所有消息收发端点(Service Activator、Transformer、Filter 等)现在都可以引用Function(或Consumer) 豆子。
消息传递注释可以直接应用于这些 bean,类似于常规MessageHandler定义。
例如,如果你有这个Functionbean 定义:
@Configuration
public class FunctionConfiguration {
    @Bean
    public Function<String, String> functionAsService() {
        return String::toUpperCase;
    }
}您可以将其用作 XML 配置文件中的简单引用:
<service-activator input-channel="processorViaFunctionChannel" ref="functionAsService"/>当我们使用 Messaging Annotations 配置流时,代码很简单:
@Bean
@Transformer(inputChannel = "functionServiceChannel")
public Function<String, String> functionAsService() {
    return String::toUpperCase;
}当函数返回数组时,Collection(基本上,任何Iterable),Stream或 ReactorFlux,@Splitter可以在这样的 bean 上用于对结果内容执行迭代。
这java.util.function.Consumer接口可用于<int:outbound-channel-adapter>或者,与@ServiceActivator注解,以执行流程的最后一步:
@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);
        }
    };
}另外,请注意上面代码片段中的注释:如果您想在Function/Consumer您不能使用 Lambda 定义。
由于 Java 类型擦除,我们无法确定apply()/accept()方法调用。
这java.util.function.Supplierinterface 可以简单地与@InboundChannelAdapter注释,或作为ref在<int:inbound-channel-adapter>:
@Bean
@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000"))
public Supplier<String> pojoSupplier() {
    return () -> "foo";
}使用 Java DSL,我们只需要在端点定义中使用对函数 bean 的引用。
同时,的Supplier接口可以按常规使用MessageSource定义:
@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 框架一起使用时非常有用,其中我们有一个函数目录,并且可以从集成流定义中引用其成员函数。