public class HandlerMethod
extends java.lang.Object
The class may be created with a bean instance or with a bean name
(e.g. lazy-init bean, prototype bean). Use createWithResolvedBean()
to obtain a HandlerMethod
instance with a bean instance resolved
through the associated BeanFactory
.
Modifier and Type | Class and Description |
---|---|
protected class |
HandlerMethod.HandlerMethodParameter
A MethodParameter with HandlerMethod-specific behavior.
|
private class |
HandlerMethod.ReturnValueMethodParameter
A MethodParameter for a HandlerMethod return type based on an actual return value.
|
Modifier and Type | Field and Description |
---|---|
private java.lang.Object |
bean |
private BeanFactory |
beanFactory |
private java.lang.Class<?> |
beanType |
private java.lang.reflect.Method |
bridgedMethod |
private java.util.List<java.lang.annotation.Annotation[][]> |
interfaceParameterAnnotations |
protected Log |
logger
Logger that is available to subclasses.
|
private java.lang.reflect.Method |
method |
private MethodParameter[] |
parameters |
private HandlerMethod |
resolvedFromHandlerMethod |
private HttpStatus |
responseStatus |
private java.lang.String |
responseStatusReason |
Modifier | Constructor and Description |
---|---|
protected |
HandlerMethod(HandlerMethod handlerMethod)
Copy constructor for use in subclasses.
|
private |
HandlerMethod(HandlerMethod handlerMethod,
java.lang.Object handler)
Re-create HandlerMethod with the resolved handler.
|
|
HandlerMethod(java.lang.Object bean,
java.lang.reflect.Method method)
Create an instance from a bean instance and a method.
|
|
HandlerMethod(java.lang.Object bean,
java.lang.String methodName,
java.lang.Class<?>... parameterTypes)
Create an instance from a bean instance, method name, and parameter types.
|
|
HandlerMethod(java.lang.String beanName,
BeanFactory beanFactory,
java.lang.reflect.Method method)
Create an instance from a bean name, a method, and a
BeanFactory . |
Modifier and Type | Method and Description |
---|---|
protected void |
assertTargetBean(java.lang.reflect.Method method,
java.lang.Object targetBean,
java.lang.Object[] args)
Assert that the target bean class is an instance of the class where the given
method is declared.
|
HandlerMethod |
createWithResolvedBean()
If the provided instance contains a bean name rather than an object instance,
the bean name is resolved before a
HandlerMethod is created and returned. |
boolean |
equals(java.lang.Object other) |
private void |
evaluateResponseStatus() |
protected static java.lang.Object |
findProvidedArgument(MethodParameter parameter,
java.lang.Object... providedArgs) |
protected static java.lang.String |
formatArgumentError(MethodParameter param,
java.lang.String message) |
protected java.lang.String |
formatInvokeError(java.lang.String text,
java.lang.Object[] args) |
java.lang.Object |
getBean()
Return the bean for this handler method.
|
java.lang.Class<?> |
getBeanType()
This method returns the type of the handler for this handler method.
|
protected java.lang.reflect.Method |
getBridgedMethod()
If the bean method is a bridge method, this method returns the bridged
(user-defined) method.
|
private java.util.List<java.lang.annotation.Annotation[][]> |
getInterfaceParameterAnnotations() |
java.lang.reflect.Method |
getMethod()
Return the method for this handler method.
|
<A extends java.lang.annotation.Annotation> |
getMethodAnnotation(java.lang.Class<A> annotationType)
Return a single annotation on the underlying method traversing its super methods
if no annotation can be found on the given method itself.
|
MethodParameter[] |
getMethodParameters()
Return the method parameters for this handler method.
|
HandlerMethod |
getResolvedFromHandlerMethod()
Return the HandlerMethod from which this HandlerMethod instance was
resolved via
createWithResolvedBean() . |
protected HttpStatus |
getResponseStatus()
Return the specified response status, if any.
|
protected java.lang.String |
getResponseStatusReason()
Return the associated response status reason, if any.
|
MethodParameter |
getReturnType()
Return the HandlerMethod return type.
|
MethodParameter |
getReturnValueType(java.lang.Object returnValue)
Return the actual return value type.
|
java.lang.String |
getShortLogMessage()
Return a short representation of this handler method for log message purposes.
|
int |
hashCode() |
<A extends java.lang.annotation.Annotation> |
hasMethodAnnotation(java.lang.Class<A> annotationType)
Return whether the parameter is declared with the given annotation type.
|
private MethodParameter[] |
initMethodParameters() |
private boolean |
isOverrideFor(java.lang.reflect.Method candidate) |
boolean |
isVoid()
Return
true if the method return type is void, false otherwise. |
java.lang.String |
toString() |
protected final Log logger
private final java.lang.Object bean
@Nullable private final BeanFactory beanFactory
private final java.lang.Class<?> beanType
private final java.lang.reflect.Method method
private final java.lang.reflect.Method bridgedMethod
private final MethodParameter[] parameters
@Nullable private HttpStatus responseStatus
@Nullable private java.lang.String responseStatusReason
@Nullable private HandlerMethod resolvedFromHandlerMethod
@Nullable private volatile java.util.List<java.lang.annotation.Annotation[][]> interfaceParameterAnnotations
public HandlerMethod(java.lang.Object bean, java.lang.reflect.Method method)
public HandlerMethod(java.lang.Object bean, java.lang.String methodName, java.lang.Class<?>... parameterTypes) throws java.lang.NoSuchMethodException
java.lang.NoSuchMethodException
- when the method cannot be foundpublic HandlerMethod(java.lang.String beanName, BeanFactory beanFactory, java.lang.reflect.Method method)
BeanFactory
.
The method createWithResolvedBean()
may be used later to
re-create the HandlerMethod
with an initialized bean.protected HandlerMethod(HandlerMethod handlerMethod)
private HandlerMethod(HandlerMethod handlerMethod, java.lang.Object handler)
private MethodParameter[] initMethodParameters()
private void evaluateResponseStatus()
public java.lang.Object getBean()
public java.lang.reflect.Method getMethod()
public java.lang.Class<?> getBeanType()
Note that if the bean type is a CGLIB-generated class, the original user-defined class is returned.
protected java.lang.reflect.Method getBridgedMethod()
getMethod()
.public MethodParameter[] getMethodParameters()
@Nullable protected HttpStatus getResponseStatus()
ResponseStatus.code()
@Nullable protected java.lang.String getResponseStatusReason()
ResponseStatus.reason()
public MethodParameter getReturnType()
public MethodParameter getReturnValueType(@Nullable java.lang.Object returnValue)
public boolean isVoid()
true
if the method return type is void, false
otherwise.@Nullable public <A extends java.lang.annotation.Annotation> A getMethodAnnotation(java.lang.Class<A> annotationType)
Also supports merged composed annotations with attribute overrides as of Spring Framework 4.2.2.
annotationType
- the type of annotation to introspect the method fornull
if none foundAnnotatedElementUtils.findMergedAnnotation(java.lang.reflect.AnnotatedElement, java.lang.Class<A>)
public <A extends java.lang.annotation.Annotation> boolean hasMethodAnnotation(java.lang.Class<A> annotationType)
annotationType
- the annotation type to look forAnnotatedElementUtils.hasAnnotation(java.lang.reflect.AnnotatedElement, java.lang.Class<? extends java.lang.annotation.Annotation>)
@Nullable public HandlerMethod getResolvedFromHandlerMethod()
createWithResolvedBean()
.public HandlerMethod createWithResolvedBean()
HandlerMethod
is created and returned.public java.lang.String getShortLogMessage()
private java.util.List<java.lang.annotation.Annotation[][]> getInterfaceParameterAnnotations()
private boolean isOverrideFor(java.lang.reflect.Method candidate)
public boolean equals(java.lang.Object other)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object
@Nullable protected static java.lang.Object findProvidedArgument(MethodParameter parameter, @Nullable java.lang.Object... providedArgs)
protected static java.lang.String formatArgumentError(MethodParameter param, java.lang.String message)
protected void assertTargetBean(java.lang.reflect.Method method, java.lang.Object targetBean, java.lang.Object[] args)
@Controller
's that require proxying should prefer
class-based proxy mechanisms.protected java.lang.String formatInvokeError(java.lang.String text, java.lang.Object[] args)