Package org.springframework.cglib.proxy

# Class MethodProxy

java.lang.Object
org.springframework.cglib.proxy.MethodProxy

public class MethodProxy extends Object
Classes generated by `Enhancer` pass this object to the registered `MethodInterceptor` objects when an intercepted method is invoked. It can be used to either invoke the original method, or call the same method on a different object of the same type.

## Method Summary

Modifier and Type
Method
Description
`static MethodProxy`
`create(Class c1, Class c2, String desc, String name1, String name2)`
For internal use by `Enhancer` only; see the `FastMethod` class for similar functionality.
`static MethodProxy`
`find(Class type, Signature sig)`
Return the `MethodProxy` used when intercepting the method matching the given signature.
`Signature`
`getSignature()`
Return the signature of the proxied method.
`int`
`getSuperIndex()`
Return the `FastClass` method index for the method used by `invokeSuper(java.lang.Object, java.lang.Object[])`.
`String`
`getSuperName()`
Return the name of the synthetic method created by CGLIB which is used by `invokeSuper(java.lang.Object, java.lang.Object[])` to invoke the superclass (non-intercepted) method implementation.
`Object`
`invoke(Object obj, Object[] args)`
Invoke the original method, on a different object of the same type.
`Object`
`invokeSuper(Object obj, Object[] args)`
Invoke the original (super) method on the specified object.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Method Details

### create

public static MethodProxy create(Class c1, Class c2, String desc, String name1, String name2)
For internal use by `Enhancer` only; see the `FastMethod` class for similar functionality.

### getSignature

public Signature getSignature()
Return the signature of the proxied method.

### getSuperName

public String getSuperName()
Return the name of the synthetic method created by CGLIB which is used by `invokeSuper(java.lang.Object, java.lang.Object[])` to invoke the superclass (non-intercepted) method implementation. The parameter types are the same as the proxied method.

### getSuperIndex

public int getSuperIndex()
Return the `FastClass` method index for the method used by `invokeSuper(java.lang.Object, java.lang.Object[])`. This index uniquely identifies the method within the generated proxy, and therefore can be useful to reference external metadata.

See Also:
  - `getSuperName()`

### find

public static MethodProxy find(Class type, Signature sig)
Return the `MethodProxy` used when intercepting the method matching the given signature.

Parameters:
  `type` - the class generated by Enhancer
  `sig` - the signature to match
Returns:
  the MethodProxy instance, or null if no applicable matching method is found
Throws:
  `IllegalArgumentException` - if the Class was not created by Enhancer or does not use a MethodInterceptor

### invoke

public Object invoke(Object obj, Object[] args) throws Throwable
Invoke the original method, on a different object of the same type.

Parameters:
  `obj` - the compatible object; recursion will result if you use the object passed as the first argument to the MethodInterceptor (usually not what you want)
  `args` - the arguments passed to the intercepted method; you may substitute a different argument array as long as the types are compatible
Throws:
  `Throwable` - the bare exceptions thrown by the called method are passed through without wrapping in an `InvocationTargetException`
See Also:
  - `MethodInterceptor.intercept(java.lang.Object, java.lang.reflect.Method, java.lang.Object[], org.springframework.cglib.proxy.MethodProxy)`

### invokeSuper

public Object invokeSuper(Object obj, Object[] args) throws Throwable
Invoke the original (super) method on the specified object.

Parameters:
  `obj` - the enhanced object, must be the object passed as the first argument to the MethodInterceptor
  `args` - the arguments passed to the intercepted method; you may substitute a different argument array as long as the types are compatible
Throws:
  `Throwable` - the bare exceptions thrown by the called method are passed through without wrapping in an `InvocationTargetException`
See Also:
  - `MethodInterceptor.intercept(java.lang.Object, java.lang.reflect.Method, java.lang.Object[], org.springframework.cglib.proxy.MethodProxy)`