org.springframework.messaging.support

## Interface ExecutorChannelInterceptor

- All Superinterfaces:
    ChannelInterceptor

      public interface ExecutorChannelInterceptor
      extends ChannelInterceptor

  An extension of `ChannelInterceptor` with callbacks to intercept the asynchronous sending of a `Message` to a specific subscriber through an `Executor`. Supported on `MessageChannel` implementations that can be configured with an `Executor`.
  Since:
    4.1
  Author:
    Rossen Stoyanchev
  See Also:
    `Message`, `MessageChannel`, `MessageHandler`

- - ### Method Summary

    All Methods Instance Methods Default Methods
    Modifier and Type | Method and Description
    --- | ---
    `default void` | `afterMessageHandled(Message<?> message, MessageChannel channel, MessageHandler handler, Exception ex)` Invoked inside the `Runnable` submitted to the Executor after calling the target MessageHandler regardless of the outcome (i.e.
    `default Message<?>` | `beforeHandle(Message<?> message, MessageChannel channel, MessageHandler handler)` Invoked inside the `Runnable` submitted to the Executor just before calling the target MessageHandler to handle the message.

    - ### Methods inherited from interface org.springframework.messaging.support.ChannelInterceptor

      `afterReceiveCompletion, afterSendCompletion, postReceive, postSend, preReceive, preSend`

- - ### Method Detail

    - #### beforeHandle

          @Nullable
          default Message<?> beforeHandle(Message<?> message,
                                                    MessageChannel channel,
                                                    MessageHandler handler)

      Invoked inside the `Runnable` submitted to the Executor just before calling the target MessageHandler to handle the message. Allows for modification of the Message if necessary or when `null` is returned the MessageHandler is not invoked.
      Parameters:
        `message` - the message to be handled
        `channel` - the channel on which the message was sent to
        `handler` - the target handler to handle the message
      Returns:
        the input message, or a new instance, or `null`

    - #### afterMessageHandled

          default void afterMessageHandled(Message<?> message,
                                           MessageChannel channel,
                                           MessageHandler handler,
                                           @Nullable
                                           Exception ex)

      Invoked inside the `Runnable` submitted to the Executor after calling the target MessageHandler regardless of the outcome (i.e. Exception raised or not) thus allowing for proper resource cleanup.

      Note that this will be invoked only if beforeHandle successfully completed and returned a Message, i.e. it did not return `null`.

      Parameters:
        `message` - the message handled
        `channel` - the channel on which the message was sent to
        `handler` - the target handler that handled the message
        `ex` - any exception that may have been raised by the handler