T - the type of the Object that contains information mapping informationpublic abstract class AbstractMethodMessageHandler<T> extends Object implements ReactiveMessageHandler, org.springframework.context.ApplicationContextAware, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.BeanNameAware
Also supports discovering and invoking exception handling methods to process exceptions raised during message handling.
| Constructor and Description |
|---|
AbstractMethodMessageHandler() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet() |
protected abstract AbstractExceptionHandlerMethodResolver |
createExceptionMethodResolverFor(Class<?> beanType)
Create a concrete instance of
AbstractExceptionHandlerMethodResolver
that finds exception handling methods based on some criteria, e.g. |
protected void |
detectHandlerMethods(Object handler)
Detect if the given handler has any methods that can handle messages and if
so register it with the extracted mapping information.
|
org.springframework.context.ApplicationContext |
getApplicationContext() |
ArgumentResolverConfigurer |
getArgumentResolverConfigurer()
Return the configured custom resolvers for handler method arguments.
|
String |
getBeanName() |
protected abstract String |
getDestination(Message<?> message)
Extract a String-based destination, if any, that can be used to perform
a direct look up into the registered mappings.
|
org.springframework.util.MultiValueMap<String,T> |
getDestinationLookup()
Return a read-only multi-value map with a direct lookup of mappings,
(e.g.
|
protected abstract Set<String> |
getDirectLookupMappings(T mapping)
Return String-based destinations for the given mapping, if any, that can
be used to find matches with a direct lookup (i.e.
|
Map<T,HandlerMethod> |
getHandlerMethods()
Return a read-only map with all handler methods and their mappings.
|
protected abstract Comparator<T> |
getMappingComparator(Message<?> message)
Return a comparator for sorting matching mappings.
|
protected abstract T |
getMappingForMethod(Method method,
Class<?> handlerType)
Obtain the mapping for the given method, if any.
|
protected abstract T |
getMatchingMapping(T mapping,
Message<?> message)
Check if a mapping matches the current message and return a possibly
new mapping with conditions relevant to the current request.
|
org.springframework.core.ReactiveAdapterRegistry |
getReactiveAdapterRegistry()
Return the configured registry for adapting reactive types.
|
ReturnValueHandlerConfigurer |
getReturnValueHandlerConfigurer()
Return the configured return value handlers.
|
protected reactor.core.publisher.Mono<Void> |
handleMatch(T mapping,
HandlerMethod handlerMethod,
Message<?> message) |
reactor.core.publisher.Mono<Void> |
handleMessage(Message<?> message)
Handle the given message.
|
protected void |
handleNoMatch(String destination,
Message<?> message)
Invoked when no matching handler is found.
|
protected abstract List<? extends HandlerMethodArgumentResolver> |
initArgumentResolvers()
Return the list of argument resolvers to use.
|
protected abstract Predicate<Class<?>> |
initHandlerPredicate()
Return the predicate to use to check whether a given Spring bean should
be introspected for message handling methods.
|
protected abstract List<? extends HandlerMethodReturnValueHandler> |
initReturnValueHandlers()
Return the list of return value handlers to use.
|
protected void |
registerExceptionHandlerAdvice(MessagingAdviceBean bean,
AbstractExceptionHandlerMethodResolver resolver)
Subclasses can invoke this method to populate the MessagingAdviceBean cache
(e.g.
|
protected void |
registerHandlerMethod(Object handler,
Method method,
T mapping)
Register a handler method and its unique mapping.
|
void |
setApplicationContext(org.springframework.context.ApplicationContext applicationContext) |
void |
setArgumentResolverConfigurer(ArgumentResolverConfigurer configurer)
Configure custom resolvers for handler method arguments.
|
void |
setBeanName(String name) |
void |
setReactiveAdapterRegistry(org.springframework.core.ReactiveAdapterRegistry registry)
Configure the registry for adapting various reactive types.
|
void |
setReturnValueHandlerConfigurer(ReturnValueHandlerConfigurer configurer)
Configure custom return value handlers for handler metohds.
|
protected final Log logger
public void setArgumentResolverConfigurer(ArgumentResolverConfigurer configurer)
public ArgumentResolverConfigurer getArgumentResolverConfigurer()
public void setReturnValueHandlerConfigurer(ReturnValueHandlerConfigurer configurer)
public ReturnValueHandlerConfigurer getReturnValueHandlerConfigurer()
public void setReactiveAdapterRegistry(org.springframework.core.ReactiveAdapterRegistry registry)
By default this is an instance of ReactiveAdapterRegistry with
default settings.
public org.springframework.core.ReactiveAdapterRegistry getReactiveAdapterRegistry()
public void setApplicationContext(@Nullable
org.springframework.context.ApplicationContext applicationContext)
setApplicationContext in interface org.springframework.context.ApplicationContextAware@Nullable public org.springframework.context.ApplicationContext getApplicationContext()
public void setBeanName(String name)
setBeanName in interface org.springframework.beans.factory.BeanNameAwarepublic String getBeanName()
protected void registerExceptionHandlerAdvice(MessagingAdviceBean bean, AbstractExceptionHandlerMethodResolver resolver)
@MessageExceptionHandler).public Map<T,HandlerMethod> getHandlerMethods()
public org.springframework.util.MultiValueMap<String,T> getDestinationLookup()
public void afterPropertiesSet()
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanprotected abstract List<? extends HandlerMethodArgumentResolver> initArgumentResolvers()
Subclasses should also take into account custom argument types configured via
setArgumentResolverConfigurer(org.springframework.messaging.handler.invocation.reactive.ArgumentResolverConfigurer).
protected abstract List<? extends HandlerMethodReturnValueHandler> initReturnValueHandlers()
Subclasses should also take into account custom return value types configured
via setReturnValueHandlerConfigurer(org.springframework.messaging.handler.invocation.reactive.ReturnValueHandlerConfigurer).
@Nullable protected abstract Predicate<Class<?>> initHandlerPredicate()
null is
returned, auto-detection is effectively disabled.protected final void detectHandlerMethods(Object handler)
Note: This method is protected and can be invoked by
sub-classes, but this should be done on startup only as documented in
registerHandlerMethod(java.lang.Object, java.lang.reflect.Method, T).
handler - the handler to check, either an instance of a Spring bean name@Nullable protected abstract T getMappingForMethod(Method method, Class<?> handlerType)
method - the method to checkhandlerType - the handler type, possibly a sub-type of the method's declaring classnull if the method is not mappedprotected final void registerHandlerMethod(Object handler, Method method, T mapping)
Note: This method is protected and can be invoked by sub-classes. Keep in mind however that the registration is not protected for concurrent use, and is expected to be done on startup.
handler - the bean name of the handler or the handler instancemethod - the method to registermapping - the mapping conditions associated with the handler methodIllegalStateException - if another method was already registered
under the same mappingprotected abstract Set<String> getDirectLookupMappings(T mapping)
Note: This is completely optional. The mapping metadata for a sub-class may support neither direct lookups, nor String based destinations.
public reactor.core.publisher.Mono<Void> handleMessage(Message<?> message) throws MessagingException
ReactiveMessageHandlerhandleMessage in interface ReactiveMessageHandlermessage - the message to be handledMono for the result of the message handling.MessagingExceptionprotected reactor.core.publisher.Mono<Void> handleMatch(T mapping, HandlerMethod handlerMethod, Message<?> message)
@Nullable protected abstract String getDestination(Message<?> message)
Note: This is completely optional. The mapping metadata for a sub-class may support neither direct lookups, nor String based destinations.
getDirectLookupMappings(Object)@Nullable protected abstract T getMatchingMapping(T mapping, Message<?> message)
mapping - the mapping to get a match formessage - the message being handlednull if there is no matchprotected abstract Comparator<T> getMappingComparator(Message<?> message)
message - the current Messagenullprotected void handleNoMatch(@Nullable
String destination,
Message<?> message)
destination - the destinationmessage - the messageprotected abstract AbstractExceptionHandlerMethodResolver createExceptionMethodResolverFor(Class<?> beanType)
AbstractExceptionHandlerMethodResolver
that finds exception handling methods based on some criteria, e.g. based
on the presence of @MessageExceptionHandler.beanType - the class in which an exception occurred during handling