在使用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();
}
亲切的问候
大卫/
答案 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
。