Top Description Fields Constructors Methods
org.springframework.util

public Class MethodInvoker

extends Object
Class Inheritance
Imports
java.lang.reflect.InvocationTargetException, .Method, .Modifier, org.springframework.lang.Nullable

Helper class that allows for specifying a method to invoke in a declarative fashion, be it static or non-static.

Usage: Specify "targetClass"/"targetMethod" or "targetObject"/"targetMethod", optionally specify arguments, prepare the invoker. Afterwards, you may invoke the method any number of times, obtaining the invocation result.

Authors
Colin Sampaleanu, Juergen Hoeller
Since
19.02.2004
See Also
prepare, invoke

Field Summary

Modifier and TypeField and Description
private Object[]
private static final Object[]
private Method
methodObject

The method we will call.

private String
protected Class<?>
private String
private Object

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
protected Method

Returns:

a matching method, or null if none
findMatchingMethod
()

Find a matching method with the specified name for the specified arguments.

public Object[]
getArguments()

Return the arguments for the method invocation.

public Method

Returns:

the prepared Method object (never null)
getPreparedMethod
()

Return the prepared Method object that will be invoked.

public Class<?>
getTargetClass()

Return the target class on which to call the target method.

public String
getTargetMethod()

Return the name of the method to be invoked.

public Object
getTargetObject()

Return the target object on which to call the target method.

public static int

Returns:

the accumulated weight for all arguments
getTypeDifferenceWeight
(Class<?>[]
the parameter types to match
paramTypes
,
Object[]
the arguments to match
args
)

Algorithm that judges the match between the declared parameter types of a candidate method and a specific list of arguments that this method is supposed to be invoked with.

public Object

Returns:

the object (possibly null) returned by the method invocation, or null if the method has a void return type
invoke
()

Invoke the specified method.

public boolean
isPrepared()

Return whether this invoker has been prepared already, i.e. whether it allows access to getPreparedMethod() already.

public void
prepare()

Prepare the specified method.

protected Class<?>

Returns:

the resolved Class
resolveClassName
(String
the class name to resolve
className
)

Resolve the given class name into a Class.

public void
setArguments(Object... arguments)

Set arguments for the method invocation.

public void
setStaticMethod(String staticMethod)

Set a fully qualified static method name to invoke, e.g. "example.MyExampleClass.myExampleMethod".

public void
setTargetClass(Class<?> targetClass)

Set the target class on which to call the target method.

public void
setTargetMethod(String targetMethod)

Set the name of the method to be invoked.

public void
setTargetObject(Object targetObject)

Set the target object on which to call the target method.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

argumentsback to summary
private Object[] arguments
Annotations
@Nullable
EMPTY_ARGUMENTSback to summary
private static final Object[] EMPTY_ARGUMENTS
methodObjectback to summary
private Method methodObject

The method we will call.

Annotations
@Nullable
staticMethodback to summary
private String staticMethod
Annotations
@Nullable
targetClassback to summary
protected Class<?> targetClass
Annotations
@Nullable
targetMethodback to summary
private String targetMethod
Annotations
@Nullable
targetObjectback to summary
private Object targetObject
Annotations
@Nullable

Constructor Detail

MethodInvokerback to summary
public MethodInvoker()

Method Detail

findMatchingMethodback to summary
protected Method findMatchingMethod()

Find a matching method with the specified name for the specified arguments.

Returns:Method

a matching method, or null if none

Annotations
@Nullable
See Also
getTargetClass(), getTargetMethod(), getArguments()
getArgumentsback to summary
public Object[] getArguments()

Return the arguments for the method invocation.

getPreparedMethodback to summary
public Method getPreparedMethod() throws IllegalStateException

Return the prepared Method object that will be invoked.

Can for example be used to determine the return type.

Returns:Method

the prepared Method object (never null)

Exceptions
IllegalStateException:
if the invoker hasn't been prepared yet
See Also
prepare, invoke
getTargetClassback to summary
public Class<?> getTargetClass()

Return the target class on which to call the target method.

Annotations
@Nullable
getTargetMethodback to summary
public String getTargetMethod()

Return the name of the method to be invoked.

Annotations
@Nullable
getTargetObjectback to summary
public Object getTargetObject()

Return the target object on which to call the target method.

Annotations
@Nullable
getTypeDifferenceWeightback to summary
public static int getTypeDifferenceWeight(Class<?>[] paramTypes, Object[] args)

Algorithm that judges the match between the declared parameter types of a candidate method and a specific list of arguments that this method is supposed to be invoked with.

Determines a weight that represents the class hierarchy difference between types and arguments. A direct match, i.e. type Integer → arg of class Integer, does not increase the result - all direct matches means weight 0. A match between type Object and arg of class Integer would increase the weight by 2, due to the superclass 2 steps up in the hierarchy (i.e. Object) being the last one that still matches the required type Object. Type Number and class Integer would increase the weight by 1 accordingly, due to the superclass 1 step up the hierarchy (i.e. Number) still matching the required type Number. Therefore, with an arg of type Integer, a constructor (Integer) would be preferred to a constructor (Number) which would in turn be preferred to a constructor (Object). All argument weights get accumulated.

Note

This is the algorithm used by MethodInvoker itself and also the algorithm used for constructor and factory method selection in Spring's bean container (in case of lenient constructor resolution which is the default for regular bean definitions).

Parameters
paramTypes:Class<?>[]

the parameter types to match

args:Object[]

the arguments to match

Returns:int

the accumulated weight for all arguments

invokeback to summary
public Object invoke() throws InvocationTargetException, IllegalAccessException

Invoke the specified method.

The invoker needs to have been prepared before.

Returns:Object

the object (possibly null) returned by the method invocation, or null if the method has a void return type

Annotations
@Nullable
Exceptions
InvocationTargetException:
if the target method threw an exception
IllegalAccessException:
if the target method couldn't be accessed
See Also
prepare
isPreparedback to summary
public boolean isPrepared()

Return whether this invoker has been prepared already, i.e. whether it allows access to getPreparedMethod() already.

prepareback to summary
public void prepare() throws ClassNotFoundException, NoSuchMethodException

Prepare the specified method. The method can be invoked any number of times afterwards.

See Also
getPreparedMethod, invoke
resolveClassNameback to summary
protected Class<?> resolveClassName(String className) throws ClassNotFoundException

Resolve the given class name into a Class.

The default implementations uses ClassUtils.forName, using the thread context class loader.

Parameters
className:String

the class name to resolve

Returns:Class<?>

the resolved Class

Exceptions
ClassNotFoundException:
if the class name was invalid
setArgumentsback to summary
public void setArguments(Object... arguments)

Set arguments for the method invocation. If this property is not set, or the Object array is of length 0, a method with no arguments is assumed.

setStaticMethodback to summary
public void setStaticMethod(String staticMethod)

Set a fully qualified static method name to invoke, e.g. "example.MyExampleClass.myExampleMethod". This is a convenient alternative to specifying targetClass and targetMethod.

See Also
setTargetClass, setTargetMethod
setTargetClassback to summary
public void setTargetClass(Class<?> targetClass)

Set the target class on which to call the target method. Only necessary when the target method is static; else, a target object needs to be specified anyway.

See Also
setTargetObject, setTargetMethod
setTargetMethodback to summary
public void setTargetMethod(String targetMethod)

Set the name of the method to be invoked. Refers to either a static method or a non-static method, depending on a target object being set.

See Also
setTargetClass, setTargetObject
setTargetObjectback to summary
public void setTargetObject(Object targetObject)

Set the target object on which to call the target method. Only necessary when the target method is not static; else, a target class is sufficient.

See Also
setTargetClass, setTargetMethod