Class MetadataParameterResolver
- All Implemented Interfaces:
HandlerInputResolver<Object>, ParameterResolver<Object>
Metadata.
This resolver can inject metadata into handler methods in two ways:
- If the message being handled implements
HasMetadata, its metadata is directly returned. - Otherwise, the metadata is extracted from the current
DeserializingMessage(if available).
Example handler:
@HandleCommand
public void handle(MyCommand command, Metadata metadata) {
String user = metadata.get("userId");
}
-
Nested Class Summary
Nested classes/interfaces inherited from interface HandlerInputResolver
HandlerInputResolver.Resolution<M> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiongetInputCacheKey(Parameter parameter, Annotation methodAnnotation, HandlerInput<Object> representative) Returns a key containing every input property that can affect whether this resolver matches the parameter and how the parameter value is resolved.booleanisNoMatchPayloadClassKey(Parameter parameter, Annotation methodAnnotation, HandlerInput<Object> representative) Returns whether an unmatched result is guaranteed to remain unmatched for every payload with the same runtime class.booleanisPayloadClassKey(Parameter parameter, Annotation methodAnnotation, HandlerInput<Object> representative) Returns whether the payload's runtime class alone determines this resolver's successful result for the supplied parameter.prepare(Parameter parameter, Annotation methodAnnotation) Prepares a resolver function when this resolver can determine compatibility from the parameter and method annotation alone.prepareInput(Parameter parameter, Annotation methodAnnotation, HandlerInput<Object> representative) Determines whether this resolver handles the parameter and, when it does, creates the function that supplies the parameter value during invocation.resolve(Parameter p, Annotation methodAnnotation) Resolves aParameterof a handler method into a value function based on the given message.Methods inherited from class TypedParameterResolver
matches, mayApplyMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ParameterResolver
determinesSpecificity, matches, mayApply, specificityPriority, test
-
Constructor Details
-
MetadataParameterResolver
public MetadataParameterResolver()
-
-
Method Details
-
resolve
Description copied from interface:ParameterResolverResolves aParameterof a handler method into a value function based on the given message.If the parameter cannot be resolved by this resolver and
ParameterResolver.matches(Parameter, Annotation, M)is not implemented, this method must returnnull.- Specified by:
resolvein interfaceParameterResolver<Object>- Parameters:
p- the parameter to resolvemethodAnnotation- the annotation present on the handler method (e.g.,@HandleEvent)- Returns:
- a function that takes a message and returns a value to be injected into the method parameter, or
nullif the parameter cannot be resolved andParameterResolver.matches(Parameter, Annotation, M)is not implemented.
-
prepare
Description copied from interface:ParameterResolverPrepares a resolver function when this resolver can determine compatibility from the parameter and method annotation alone.The default returns
null, which keeps resolution message-dependent. Implementations should override this only whenParameterResolver.matches(Parameter, Annotation, Object)would always betruefor the supplied parameter, regardless of the message instance. Dynamic resolvers such as payload, trigger, or entity resolvers should keep the default behavior.- Specified by:
preparein interfaceParameterResolver<Object>- Parameters:
parameter- the parameter to resolvemethodAnnotation- the annotation present on the handler method- Returns:
- a prepared resolver, or
nullwhen resolution must remain message-dependent
-
getInputCacheKey
public Object getInputCacheKey(Parameter parameter, Annotation methodAnnotation, HandlerInput<Object> representative) Description copied from interface:HandlerInputResolverReturns a key containing every input property that can affect whether this resolver matches the parameter and how the parameter value is resolved.Return
nullwhen no safe reusable key can be provided. Fluxzero will then fall back to normal per-message resolution. Keys are compared usingObject.equals(Object)and must be stable after they are returned.- Specified by:
getInputCacheKeyin interfaceHandlerInputResolver<Object>- Parameters:
parameter- the handler parameter to resolvemethodAnnotation- the annotation that marks the handler method, if presentrepresentative- an input representative of the group to be cached- Returns:
- a stable, complete cache key, or
nullto disable prepared resolution for this input
-
isPayloadClassKey
public boolean isPayloadClassKey(Parameter parameter, Annotation methodAnnotation, HandlerInput<Object> representative) Description copied from interface:HandlerInputResolverReturns whether the payload's runtime class alone determines this resolver's successful result for the supplied parameter.Return
trueonly if every payload of that class produces the same match decision and may use the same prepared resolver. This enables a faster class-based lookup.- Specified by:
isPayloadClassKeyin interfaceHandlerInputResolver<Object>- Returns:
trueif the result can safely be reused for every payload of the same runtime class
-
isNoMatchPayloadClassKey
public boolean isNoMatchPayloadClassKey(Parameter parameter, Annotation methodAnnotation, HandlerInput<Object> representative) Description copied from interface:HandlerInputResolverReturns whether an unmatched result is guaranteed to remain unmatched for every payload with the same runtime class.This is separate from
HandlerInputResolver.isPayloadClassKey(Parameter, Annotation, HandlerInput)because matching and non-matching inputs may require different cache guarantees.- Specified by:
isNoMatchPayloadClassKeyin interfaceHandlerInputResolver<Object>- Returns:
trueif the non-match can safely be reused for the entire payload class
-
prepareInput
public HandlerInputResolver.Resolution<Object> prepareInput(Parameter parameter, Annotation methodAnnotation, HandlerInput<Object> representative) Description copied from interface:HandlerInputResolverDetermines whether this resolver handles the parameter and, when it does, creates the function that supplies the parameter value during invocation.The result must agree with normal
ParameterResolverselection, including any contribution the resolver makes to handler specificity.- Specified by:
prepareInputin interfaceHandlerInputResolver<Object>- Parameters:
parameter- the handler parameter to resolvemethodAnnotation- the annotation that marks the handler method, if presentrepresentative- an input representative of the cache key returned for this parameter- Returns:
- an unmatched, rejected, or successfully resolved result
-