我有一个Spring集成应用程序,使用not_analyzed
构建器模式引导Java DSL配置。我需要使用IntegrationFlow
方法,我不想在那里有lambda函数,就像网络的大多数例子一样。相反,我想将它委托给一个单独的bean(服务)。我该如何实施呢?
我发现下面的一个例子使用内部类,但我需要使用依赖于其他bean的自动装配的Spring bean,所以内部类不适合我。我最好的方法是什么?
.handle()
答案 0 :(得分:3)
请从版本1.1开始寻找新的API:
@Configuration
@EnableIntegration
@ComponentScan
public class MyConfiguration {
@Autowired
private GreetingService greetingService;
@Bean
public IntegrationFlow greetingFlow() {
return IntegrationFlows.from("greetingChannel")
.handle(this.greetingService)
.get();
}
}
@Component
public class GreetingService {
public void greeting(String payload) {
System.out.println("Hello " + payload);
}
}
https://spring.io/blog/2015/04/15/spring-integration-java-dsl-1-1-m1-is-available
该方法还有另一个重载版本:
public B handle(Object service, String methodName) {
有关详细信息,请参阅IntegrationFlowDefinition
JavaDocs。
修改强>
.handle(this.greetingService::greeting)
样式示例:
@Bean
public IntegrationFlow lambdasFlow() {
return flow -> flow
.handle(this::divideForHalf)
.handle(this::logMessage);
}
public Integer divideForHalf(Integer payload, Map<String, Object> headers) {
return payload / 2;
}
public void logMessage(Message<?> message) {
System.out.println("My Message: " + message);
}