将此 Java 8 DSL 转换为非 Java 8

Convert this Java 8 DSL to non-Java 8

我在使用 XML 命名空间几年后才开始使用 Spring 集成 DSL。

我喜欢 DSL,但我缺乏 Java 8 知识阻碍了我。

例如,您将如何在 Java 7 中编写以下示例代码,我对 e -> e.id("sendMailEndpoint")) 感到困惑,因为我无法弄清楚 e 是什么类型!

   @Bean
   public IntegrationFlow sendMailFlow() {
        return IntegrationFlows.from("sendMailChannel")
            .handle(Mail.outboundAdapter("localhost")
                            .port(smtpPort)
                            .credentials("user", "pw")
                            .protocol("smtp")
                            .javaMailProperties(p -> p.put("mail.debug", "true")),
                    e -> e.id("sendMailEndpoint"))
            .get();
   }

亲切的问候

大卫/

David,任何 Lambda 都是内联功能接口实现。 如果您查看 .handle() 方法的源代码(或至少 JavaDocs),您会发现 e 参数是 Consumer<GenericEndpointSpec<H>>,因此对于非-Java 8 环境你只需要在这个地方实现那个接口:

 .handle(Mail.outboundAdapter("localhost")
                        .port(smtpPort)
                        .credentials("user", "pw")
                        .protocol("smtp")
                        .javaMailProperties(p -> p.put("mail.debug", "true")),
                new Consumer<GenericEndpointSpec<MailSendingMessageHandler>>() {

                            @Override
                            public void accept(GenericEndpointSpec<MailSendingMessageHandler> e) {
                                e.id("sendMailEndpoint");
                            }
                })

javaMailProperties也是如此。