Spring Integration Java DSL - @ServiceActivator метод с аннотациями параметров @ Header
У меня есть метод Spring Integration 4 bean со следующей сигнатурой:
@Component
public class AService {
@ServiceActivator
public Message<?> serviceMethod(
Message<?> message,
@Header(ServiceHeader.A_STATE) AState state,
@Header(ServiceHeader.A_ID) String id) {
...
}
...
}
На данный момент я вызываю этот метод службы из Spring Integration Java DSL (spring-integration-java-dsl:1.0.1.RELEASE) поток такой:
.handle("aService", "serviceMethod")
Это работает абсолютно нормально, но мне интересно, можно ли вызвать метод service следующим образом:
.handle(Message.class, (m, h) -> aService.serviceMethod(m, h))
Причина, по которой я хотел бы вызвать метод обслуживания таким образом, заключается в том, что, когда кто-то смотрит на код с помощью IDE, такой как Eclipse, они могут детализировать метод этой службы, например, выделив метод и нажав клавишу F3.
Итак, мой вопрос заключается в том, существует ли альтернативный способ вызова метода
@ServiceActivator (который включает аннотации @Header) без использования строк для имени службы / метода службы в .handle()? 1 ответ:
Не совсем, Вы не можете передать все сообщение и выбранные заголовки, но вы можете передать полезную нагрузку и отдельные заголовки...
.handle(String.class, (p, h) -> aService().serviceMethod(p, (AState) h.get(ServiceHeader.A_STATE), (String) h.get(ServiceHeader.A_ID)))(предполагая, что полезная нагрузка - это
Обратите внимание, что аннотацииString).@Headerв этом сценарии бессмысленны, поскольку вы непосредственно извлекаете заголовки в лямбда-выражении.Он также не должен быть аннотирован как
@ServiceActivator; Вы можете вызвать любой метод bean таким образом.public Message<?> serviceMethod( String payload, AState state, String id) { ... }The
.handle("aService", "serviceMethod")Вариация-это когда все происходит волшебство (соответствие содержимого сообщения параметрам метода). Конечно, мы не можем сделать никакого "волшебства", когда вы хотите вызвать метод непосредственно в Java.
Comments