org.springframework.messaging.support

## Interface ChannelInterceptor

All Known Subinterfaces:
  ExecutorChannelInterceptor

All Known Implementing Classes:
  ChannelInterceptorAdapter, ImmutableMessageChannelInterceptor

    public interface ChannelInterceptor

Interface for interceptors that are able to view and/or modify the `Messages` being sent-to and/or received-from a `MessageChannel`.

Since:
  4.0
Author:
  Mark Fisher, Rossen Stoyanchev
See Also:
  `Message`, `MessageChannel`

### Method Summary

All Methods Instance Methods Default Methods
`default void` `afterReceiveCompletion(Message<?> message, MessageChannel channel, Exception ex)` Invoked after the completion of a receive regardless of any exception that have been raised thus allowing for proper resource cleanup.
`default void` `afterSendCompletion(Message<?> message, MessageChannel channel, boolean sent, Exception ex)` Invoked after the completion of a send regardless of any exception that have been raised thus allowing for proper resource cleanup.
`default Message<?>` `postReceive(Message<?> message, MessageChannel channel)` Invoked immediately after a Message has been retrieved but before it is returned to the caller.
`default void` `postSend(Message<?> message, MessageChannel channel, boolean sent)` Invoked immediately after the send invocation.
`default boolean` `preReceive(MessageChannel channel)` Invoked as soon as receive is called and before a Message is actually retrieved.
`default Message<?>` `preSend(Message<?> message, MessageChannel channel)` Invoked before the Message is actually sent to the channel.

### Method Detail

#### preSend

    @Nullable
    default Message<?> preSend(Message<?> message,
                                         MessageChannel channel)

Invoked before the Message is actually sent to the channel. This allows for modification of the Message if necessary. If this method returns `null` then the actual send invocation will not occur.

#### postSend

    default void postSend(Message<?> message,
                          MessageChannel channel,
                          boolean sent)

Invoked immediately after the send invocation. The boolean value argument represents the return value of that invocation.

#### afterSendCompletion

    default void afterSendCompletion(Message<?> message,
                                     MessageChannel channel,
                                     boolean sent,
                                     @Nullable
                                     Exception ex)

Invoked after the completion of a send regardless of any exception that have been raised thus allowing for proper resource cleanup.

Note that this will be invoked only if `preSend(org.springframework.messaging.Message<?>, org.springframework.messaging.MessageChannel)` successfully completed and returned a Message, i.e. it did not return `null`.

Since:
  4.1

#### preReceive

    default boolean preReceive(MessageChannel channel)

Invoked as soon as receive is called and before a Message is actually retrieved. If the return value is 'false', then no Message will be retrieved. This only applies to PollableChannels.

#### postReceive

    @Nullable
    default Message<?> postReceive(Message<?> message,
                                             MessageChannel channel)

Invoked immediately after a Message has been retrieved but before it is returned to the caller. The Message may be modified if necessary; `null` aborts further interceptor invocations. This only applies to PollableChannels.

#### afterReceiveCompletion

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

Invoked after the completion of a receive regardless of any exception that have been raised thus allowing for proper resource cleanup.

Note that this will be invoked only if `preReceive(org.springframework.messaging.MessageChannel)` successfully completed and returned `true`.

Since:
  4.1