Это потому, что StreamListener уже является прокси.Слишком много, чтобы объяснить, и, вероятно, будет хорошей темой для ведения блога.,,В любом случае, я рад, что вы описали реальную проблему, которую вы пытаетесь решить, и которая может быть решена гораздо более простым подходом, а именно введением ChannelInterceptor
, что, по сути, является рекомендацией Around для вызова вашего обработчика сообщений.В основном вот пример:
@Bean
@GlobalChannelInterceptor
public ChannelInterceptor channelInterceptor() {
return new ChannelInterceptor() {
@Override
public Message<?> preSend(Message<?> msg, MessageChannel mc) {
System.out.println("Before send to channel: " + mc);
return msg;
}
@Override
public void afterSendCompletion(Message<?> msg, MessageChannel mc, boolean bln, Exception excptn) {
System.out.println("After send completion to channel: " + mc);
}
@Override
public void postSend(Message<?> msg, MessageChannel mc, boolean bln) {
System.out.println("After send to channel: " + mc);
}
};
}
.,,и вот результат, который он выдаст:
Before send to channel: input
Before send to channel: integrationFlowCreator.channel#0
===> SOME LOG MESSAGE INSIDE YOUR CODE
After send to channel: integrationFlowCreator.channel#0
After send completion to channel: integrationFlowCreator.channel#0
After send to channel: input
After send completion to channel: input
Вы просто объявляете это в своей конфигурации, и все должно быть в порядке.Он будет применен ко всем каналам, поэтому вы (с логикой) будете следить только один раз, когда захотите.Пожалуйста, обратитесь к Javadoc для GlobalChannelInterceptor
для более подробной информации.Надеюсь, это поможет