将此Java 8 DSL转换为非Java 8

时间:2015-02-19 10:07:28

标签: spring-integration

在使用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();
   }

亲切的问候

大卫/

1 个答案:

答案 0 :(得分:1)

David,任何Lambda都是内联功能接口实现。 如果你看一下.handle()方法的源代码(或至少是JavaDocs),你会发现e param是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