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

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and 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, org.springframework.cglib.core.Signature sig)` Return the `MethodProxy` used when intercepting the method matching the given signature.
    `org.springframework.cglib.core.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 Detail

    - #### 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 org.springframework.cglib.core.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,
                                         org.springframework.cglib.core.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)`