2017-09-28 3 views
1

많은 경우 통합 플로우에서 광범위한 역할을하는 .handle("someBean", "someMethod") EIP 메소드를 보았습니다. 나는 이것이 이전의 XML Config의 서비스 액티베이터 일 뿐이라는 것을 이해할 수 있지만,이 빈을 만드는 방법에 대한 명확한 설명과 someMethod의 리턴이 필요합니다. 또한 어떤 경우에 .handle(...)을 사용해야합니까? Java DSL을 사용한 완성 된 예제가 나에게 도움이 될 것입니다.스프링 통합 Java DSL .handle (String beanName, String methodName)

답변

1

정확히 알 수 있듯이 .handle("someBean", "someMethod")<int:service-activator ref="someBean" method="someMethod"/> : https://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#service-activator-namespace과 완전히 동일합니다.

즉, someMethod에 서비스 호출에 대한 정의가 someBean이어야합니다. 예를 들어, 당신은 위의 경우에 수신 메시지의 payload를 변환하고 결과를 반환하는 간단한 논리를 수행해야합니다

class MyService { 

    public String someMethod(String payload) { 
     return payload.toUpperCase(); 
    } 

} 

이 방법의 반환은 다음 EIP 엔드 포인트에 대한 아웃 바운드 메시지의 payload로된다 귀하의 IntegrationFlow 정의.

Java DSL의 모든 내용은 참조 설명서에 나와 있습니다. 특히 <service-activator> 또는 @ServiceActivator에 대한 모든 규칙이 .handle()에 적용됩니다.

+0

신속한 답변을 해주신 Artem에 감사드립니다. 'someMethod'에'@ Bean'으로 주석을 달 필요가 있습니까? 또한 변환 EIP 메소드를 사용하여 동일한 논리를 수행 할 수 있으므로'.handle (...) '사용법에 대한 또 다른 예제를 제공 할 수 있습니까? 어느 경우에'.handle (...) '을 엄격하게 사용해야합니까? –

+0

아니요, 빈에 대해서는'@ Bean' 만 필요합니다. bean 메소드를 @Configuration' 파일에 추가합니다. 이미 bean 인'someBean'을 가지고 있습니다. 서비스 메소드에는 주석이 전혀 없을 수 있습니다. '.transform()'과 모순되는'.handle()'의 또 다른 샘플은 당신의 메소드에서'JdbcTemplate'을 직접적으로 사용하는 것과 같습니다. 맞아, 당신도 변압기로 그렇게 할 수 있지만 적절한 구성 요소 사이의 로직을 구별하는 것이 낫다. 그것이 변환에 관한 것이 아니라면, .handle()이 당신을위한 것이다! 게다가 .handle()은 응답을 필요로하지 않지만'.transform()'은 응답한다는 것을 명심하십시오. –