Spring集成Java DSL服务执行器(.handle)应该使用bean

时间:2015-12-21 22:26:58

标签: spring-integration

我有一个Spring集成应用程序,使用not_analyzed构建器模式引导Java DSL配置。我需要使用IntegrationFlow方法,我不想在那里有lambda函数,就像网络的大多数例子一样。相反,我想将它委托给一个单独的bean(服务)。我该如何实施呢?

我发现下面的一个例子使用内部类,但我需要使用依赖于其他bean的自动装配的Spring bean,所以内部类不适合我。我最好的方法是什么?

.handle()

1 个答案:

答案 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);
    }