Top Description Inners Fields Constructors Methods
org.springframework.core.annotation

public Class AnnotatedMethod

extends Object
Class Inheritance
Imports
java.lang.annotation.Annotation, java.lang.reflect.Method, java.util.ArrayList, .Arrays, .List, org.springframework.core.BridgeMethodResolver, .MethodParameter, .ResolvableType, org.springframework.lang.NonNull, .Nullable, org.springframework.util.Assert, .ObjectUtils, .ReflectionUtils, .StringUtils

A convenient wrapper for a Method handle, providing deep annotation introspection on methods and method parameters, including the exposure of interface-declared parameter annotations from the concrete target method.
Author
Juergen Hoeller
Since
6.1
See Also
getMethodAnnotation(Class), getMethodParameters(), AnnotatedElementUtils, SynthesizingMethodParameter

Nested and Inner Type Summary

Modifier and TypeClass and Description
protected class
AnnotatedMethod.AnnotatedMethodParameter

A MethodParameter with AnnotatedMethod-specific behavior.

private class
AnnotatedMethod.ReturnValueMethodParameter

A MethodParameter for an AnnotatedMethod return type based on an actual return value.

Field Summary

Modifier and TypeField and Description
private final Method
private volatile List<Annotation[][]>
private final Method
private final MethodParameter[]

Constructor Summary

AccessConstructor and Description
public
AnnotatedMethod(Method
the Method handle to wrap
method
)

Create an instance that wraps the given Method.

protected
AnnotatedMethod(AnnotatedMethod annotatedMethod)

Copy constructor for use in subclasses.

Method Summary

Modifier and TypeMethod and Description
public boolean
equals(Object
the reference object with which to compare.
other
)

Overrides java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

protected static Object
findProvidedArgument(MethodParameter parameter, Object... providedArgs)

protected static String
protected final Method
getBridgedMethod()

If the annotated method is a bridge method, this method returns the bridged (user-defined) method.

protected Class<?>
getContainingClass()

Expose the containing class for method parameters.

private List<Annotation[][]>
public final Method
getMethod()

Return the annotated method.

public <A extends Annotation> A

Returns:

the annotation, or null if none found
getMethodAnnotation
(Class<A>
the annotation type to look for
annotationType
)

Return a single annotation on the underlying method, traversing its super methods if no annotation can be found on the given method itself.

public final MethodParameter[]
getMethodParameters()

Return the method parameters for this AnnotatedMethod.

public MethodParameter
getReturnType()

Return a MethodParameter for the declared return type.

public MethodParameter
getReturnValueType(Object returnValue)

Return a MethodParameter for the actual return value type.

public int
hashCode()

Overrides java.lang.Object.hashCode.

Returns a hash code value for this object.

public <A extends Annotation> boolean
hasMethodAnnotation(Class<A>
the annotation type to look for
annotationType
)

Determine if an annotation of the given type is present or meta-present on the method.

private MethodParameter[]
private boolean
isOverrideFor(Method candidate)

public boolean
isVoid()

Return true if the method's return type is void, false otherwise.

public String
toString()

Overrides java.lang.Object.toString.

Returns a string representation of the object.

Inherited from java.lang.Object:
clonefinalizegetClassnotifynotifyAllwaitwaitwait

Field Detail

bridgedMethodback to summary
private final Method bridgedMethod
inheritedParameterAnnotationsback to summary
private volatile List<Annotation[][]> inheritedParameterAnnotations
Annotations
@Nullable
methodback to summary
private final Method method
parametersback to summary
private final MethodParameter[] parameters

Constructor Detail

AnnotatedMethodback to summary
public AnnotatedMethod(Method method)

Create an instance that wraps the given Method.

Parameters
method:Method

the Method handle to wrap

AnnotatedMethodback to summary
protected AnnotatedMethod(AnnotatedMethod annotatedMethod)

Copy constructor for use in subclasses.

Method Detail

equalsback to summary
public boolean equals(Object other)

Overrides java.lang.Object.equals.

Doc from java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.

Parameters
other:Object

the reference object with which to compare.

Returns:boolean

true if this object is the same as the obj argument; false otherwise.

Annotations
@Override
findProvidedArgumentback to summary
protected static Object findProvidedArgument(MethodParameter parameter, Object... providedArgs)
Annotations
@Nullable
formatArgumentErrorback to summary
protected static String formatArgumentError(MethodParameter param, String message)
getBridgedMethodback to summary
protected final Method getBridgedMethod()

If the annotated method is a bridge method, this method returns the bridged (user-defined) method. Otherwise, it returns the same method as getMethod().

getContainingClassback to summary
protected Class<?> getContainingClass()

Expose the containing class for method parameters.

See Also
MethodParameter#getContainingClass()
getInheritedParameterAnnotationsback to summary
private List<Annotation[][]> getInheritedParameterAnnotations()
getMethodback to summary
public final Method getMethod()

Return the annotated method.

getMethodAnnotationback to summary
public <A extends Annotation> A getMethodAnnotation(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.

Supports merged composed annotations with attribute overrides.

Parameters
annotationType:Class<A>

the annotation type to look for

Returns:A

the annotation, or null if none found

Annotations
@Nullable
See Also
AnnotatedElementUtils#findMergedAnnotation
getMethodParametersback to summary
public final MethodParameter[] getMethodParameters()

Return the method parameters for this AnnotatedMethod.

getReturnTypeback to summary
public MethodParameter getReturnType()

Return a MethodParameter for the declared return type.

getReturnValueTypeback to summary
public MethodParameter getReturnValueType(Object returnValue)

Return a MethodParameter for the actual return value type.

hashCodeback to summary
public int hashCode()

Overrides java.lang.Object.hashCode.

Doc from java.lang.Object.hashCode.

Returns a hash code value for this object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
Returns:int

a hash code value for this object

Annotations
@Override
hasMethodAnnotationback to summary
public <A extends Annotation> boolean hasMethodAnnotation(Class<A> annotationType)

Determine if an annotation of the given type is present or meta-present on the method.

Parameters
annotationType:Class<A>

the annotation type to look for

See Also
AnnotatedElementUtils#hasAnnotation
initMethodParametersback to summary
private MethodParameter[] initMethodParameters()
isOverrideForback to summary
private boolean isOverrideFor(Method candidate)
isVoidback to summary
public boolean isVoid()

Return true if the method's return type is void, false otherwise.

toStringback to summary
public String toString()

Overrides java.lang.Object.toString.

Doc from java.lang.Object.toString.

Returns a string representation of the object. Satisfying this method's contract implies a non-null result must be returned.

Returns:String

a string representation of the object

Annotations
@Override
org.springframework.core.annotation back to summary

protected Class AnnotatedMethod.AnnotatedMethodParameter

extends SynthesizingMethodParameter
Class Inheritance
Known Direct Subclasses
org.springframework.core.annotation.AnnotatedMethod.ReturnValueMethodParameter

A MethodParameter with AnnotatedMethod-specific behavior.

Field Summary

Modifier and TypeField and Description
private volatile Annotation[]

Constructor Summary

AccessConstructor and Description
public
protected

Method Summary

Modifier and TypeMethod and Description
public AnnotatedMethod.AnnotatedMethodParameter
clone()

Overrides org.springframework.core.annotation.SynthesizingMethodParameter.clone.

Creates and returns a copy of this object.

public Class<?>
getContainingClass()

Overrides org.springframework.core.MethodParameter.getContainingClass.

Return the containing class for this method parameter.

public Method
getMethod()

Overrides org.springframework.core.MethodParameter.getMethod.

Return the wrapped Method, if any.

public <T extends Annotation> T
getMethodAnnotation(Class<T>
the annotation type to look for
annotationType
)

Overrides org.springframework.core.MethodParameter.getMethodAnnotation.

Return the method/constructor annotation of the given type, if available.

public Annotation[]
getParameterAnnotations()

Overrides org.springframework.core.MethodParameter.getParameterAnnotations.

Return the annotations associated with the specific method/constructor parameter.

public <T extends Annotation> boolean
hasMethodAnnotation(Class<T>
the annotation type to look for
annotationType
)

Overrides org.springframework.core.MethodParameter.hasMethodAnnotation.

Return whether the method/constructor is annotated with the given type.

Inherited from org.springframework.core.annotation.SynthesizingMethodParameter:
adaptAnnotationadaptAnnotationArrayforExecutableforParameter

Field Detail

combinedAnnotationsback to summary
private volatile Annotation[] combinedAnnotations
Annotations
@Nullable

Constructor Detail

AnnotatedMethodParameterback to summary
public AnnotatedMethodParameter(int index)
AnnotatedMethodParameterback to summary
protected AnnotatedMethodParameter(AnnotatedMethod.AnnotatedMethodParameter original)

Method Detail

cloneback to summary
public AnnotatedMethod.AnnotatedMethodParameter clone()

Overrides org.springframework.core.annotation.SynthesizingMethodParameter.clone.

Doc from java.lang.Object.clone.

Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object. The general intent is that, for any object x, the expression:

x.clone() != x
will be true, and that the expression:
x.clone().getClass() == x.getClass()
will be true, but these are not absolute requirements. While it is typically the case that:
x.clone().equals(x)
will be true, this is not an absolute requirement.

By convention, the returned object should be obtained by calling super.clone. If a class and all of its superclasses (except Object) obey this convention, it will be the case that x.clone().getClass() == x.getClass().

By convention, the object returned by this method should be independent of this object (which is being cloned). To achieve this independence, it may be necessary to modify one or more fields of the object returned by super.clone before returning it. Typically, this means copying any mutable objects that comprise the internal "deep structure" of the object being cloned and replacing the references to these objects with references to the copies. If a class contains only primitive fields or references to immutable objects, then it is usually the case that no fields in the object returned by super.clone need to be modified.

Returns:AnnotatedMethod.AnnotatedMethodParameter

a clone of this instance.

Annotations
@Override
getContainingClassback to summary
public Class<?> getContainingClass()

Overrides org.springframework.core.MethodParameter.getContainingClass.

Doc from org.springframework.core.MethodParameter.getContainingClass.

Return the containing class for this method parameter.

Returns:Class<?>

a specific containing class (potentially a subclass of the declaring class), or otherwise simply the declaring class itself

Annotations
@Override
getMethodback to summary
public Method getMethod()

Overrides org.springframework.core.MethodParameter.getMethod.

Doc from org.springframework.core.MethodParameter.getMethod.

Return the wrapped Method, if any.

Note

Either Method or Constructor is available.

Returns:Method

the Method, or null if none

Annotations
@Override
@NonNull
getMethodAnnotationback to summary
public <T extends Annotation> T getMethodAnnotation(Class<T> annotationType)

Overrides org.springframework.core.MethodParameter.getMethodAnnotation.

Doc from org.springframework.core.MethodParameter.getMethodAnnotation.

Return the method/constructor annotation of the given type, if available.

Parameters
annotationType:Class<T>

the annotation type to look for

Returns:T

the annotation object, or null if not found

Annotations
@Override
getParameterAnnotationsback to summary
public Annotation[] getParameterAnnotations()

Overrides org.springframework.core.MethodParameter.getParameterAnnotations.

Doc from org.springframework.core.MethodParameter.getParameterAnnotations.

Return the annotations associated with the specific method/constructor parameter.

Annotations
@Override
hasMethodAnnotationback to summary
public <T extends Annotation> boolean hasMethodAnnotation(Class<T> annotationType)

Overrides org.springframework.core.MethodParameter.hasMethodAnnotation.

Doc from org.springframework.core.MethodParameter.hasMethodAnnotation.

Return whether the method/constructor is annotated with the given type.

Parameters
annotationType:Class<T>

the annotation type to look for

Annotations
@Override
org.springframework.core.annotation back to summary

private Class AnnotatedMethod.ReturnValueMethodParameter

extends AnnotatedMethodParameter
Class Inheritance

A MethodParameter for an AnnotatedMethod return type based on an actual return value.

Field Summary

Modifier and TypeField and Description
private final Class<?>

Constructor Summary

AccessConstructor and Description
public
protected

Method Summary

Modifier and TypeMethod and Description
public AnnotatedMethod.ReturnValueMethodParameter
public Class<?>
getParameterType()

Overrides org.springframework.core.MethodParameter.getParameterType.

Return the type of the method/constructor parameter.

Inherited from org.springframework.core.annotation.AnnotatedMethod.AnnotatedMethodParameter:
getContainingClassgetMethodgetMethodAnnotationgetParameterAnnotationshasMethodAnnotation

Field Detail

returnValueTypeback to summary
private final Class<?> returnValueType
Annotations
@Nullable

Constructor Detail

ReturnValueMethodParameterback to summary
public ReturnValueMethodParameter(Object returnValue)
ReturnValueMethodParameterback to summary
protected ReturnValueMethodParameter(AnnotatedMethod.ReturnValueMethodParameter original)

Method Detail

cloneback to summary
public AnnotatedMethod.ReturnValueMethodParameter clone()

Overrides org.springframework.core.annotation.AnnotatedMethod.AnnotatedMethodParameter.clone.

Doc from java.lang.Object.clone.

Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object. The general intent is that, for any object x, the expression:

x.clone() != x
will be true, and that the expression:
x.clone().getClass() == x.getClass()
will be true, but these are not absolute requirements. While it is typically the case that:
x.clone().equals(x)
will be true, this is not an absolute requirement.

By convention, the returned object should be obtained by calling super.clone. If a class and all of its superclasses (except Object) obey this convention, it will be the case that x.clone().getClass() == x.getClass().

By convention, the object returned by this method should be independent of this object (which is being cloned). To achieve this independence, it may be necessary to modify one or more fields of the object returned by super.clone before returning it. Typically, this means copying any mutable objects that comprise the internal "deep structure" of the object being cloned and replacing the references to these objects with references to the copies. If a class contains only primitive fields or references to immutable objects, then it is usually the case that no fields in the object returned by super.clone need to be modified.

Returns:AnnotatedMethod.ReturnValueMethodParameter

a clone of this instance.

Annotations
@Override
getParameterTypeback to summary
public Class<?> getParameterType()

Overrides org.springframework.core.MethodParameter.getParameterType.

Doc from org.springframework.core.MethodParameter.getParameterType.

Return the type of the method/constructor parameter.

Returns:Class<?>

the parameter type (never null)

Annotations
@Override