Proxy Clase

Definición

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

[Android.Runtime.Register("java/lang/reflect/Proxy", DoNotGenerateAcw=true)]
public class Proxy : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable
[<Android.Runtime.Register("java/lang/reflect/Proxy", DoNotGenerateAcw=true)>]
type Proxy = class
    inherit Object
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Herencia
Proxy
Atributos
Implementaciones

Comentarios

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

Para crear un proxy para alguna interfaz Foo:

InvocationHandler handler = new MyInvocationHandler(...);
                Class&lt;?&gt; proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), Foo.class);
                Foo f = (Foo) proxyClass.getConstructor(InvocationHandler.class).
                                newInstance(handler);

o más simplemente:

Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                                                     new Class&lt;?&gt;[] { Foo.class },
                                                     handler);

Una clase de proxy dinámico (simplemente denominada clase de proxy a continuación) es una clase que implementa una lista de interfaces especificadas en tiempo de ejecución cuando se crea la clase, con un comportamiento como se describe a continuación.

Una interfaz de proxy es una interfaz de este tipo que se implementa mediante una clase de proxy.

Una instancia de proxy es una instancia de una clase de proxy.

Cada instancia de proxy tiene un objeto de controlador de invocación asociado, que implementa la interfaz InvocationHandler. Una invocación de método en una instancia de proxy a través de una de sus interfaces de proxy se enviará al InvocationHandler#invoke invoke método del controlador de invocación de la instancia, pasando la instancia de proxy, un java.lang.reflect.Method objeto que identifica el método que se invocó y una matriz de tipo Object que contiene los argumentos. El controlador de invocación procesa la invocación del método codificado según corresponda y el resultado que devuelve se devolverá como resultado de la invocación del método en la instancia de proxy.

Una clase de proxy tiene las siguientes propiedades:

<Las clases ul><li>Proxy son <públicas>, finales y no abstractas</em> si todas las interfaces de proxy son públicas.</Li>

<las clases de proxy li>son <no>públicas, finales y no abstractas</em> si alguna de las interfaces de proxy no es pública.</Li>

<li>El nombre no completo de una clase de proxy no se especifica. Sin embargo, el espacio de nombres de clase que comienzan con la cadena "$Proxy" debe estar reservado para las clases de proxy.

<li>Una clase de proxy extiende java.lang.reflect.Proxy.

<li>Una clase de proxy implementa exactamente las interfaces especificadas en su creación, en el mismo orden.

<li>Si una clase de proxy implementa una interfaz no pública, se definirá en el mismo paquete que esa interfaz. De lo contrario, tampoco se especifica el paquete de una clase de proxy. Tenga en cuenta que el sellado de paquetes no impedirá que una clase de proxy se defina correctamente en un paquete determinado en tiempo de ejecución y ninguna de las clases ya definidas por el mismo cargador de clases y el mismo paquete con firmantes concretos.

<li>Dado que una clase de proxy implementa todas las interfaces especificadas en su creación, la invocación getInterfaces en su Class objeto devolverá una matriz que contenga la misma lista de interfaces (en el orden especificado en su creación), invocar getMethods en su Class objeto devolverá una matriz de Method objetos que incluyan todos los métodos en esas interfaces y la invocación getMethod buscará métodos en las interfaces proxy como se esperaría.

<li>El Proxy#isProxyClass Proxy.isProxyClass método devolverá true si se pasa una clase de proxy( una clase devuelta por Proxy.getProxyClass o la clase de un objeto devuelto por Proxy.newProxyInstance- y false en caso contrario.

<li>La java.security.ProtectionDomain clase de proxy es la misma que la de las clases del sistema cargadas por el cargador de clases de arranque, como java.lang.Object, porque el código de una clase de proxy se genera mediante código de sistema de confianza. Normalmente, a este dominio de protección se le concederá java.security.AllPermission.

<li>Cada clase de proxy tiene un constructor público que toma un argumento, una implementación de la interfaz InvocationHandler, para establecer el controlador de invocación para una instancia de proxy. En lugar de tener que usar la API de reflexión para acceder al constructor público, también se puede crear una instancia de proxy mediante una llamada al Proxy#newProxyInstance Proxy.newProxyInstance método , que combina las acciones de llamada Proxy#getProxyClass Proxy.getProxyClass con la invocación del constructor con un controlador de invocación. </ul>

Una instancia de proxy tiene las siguientes propiedades:

<ul><li>Dado una instancia proxy de proxy y una de las interfaces implementadas por su clase Foode proxy, la siguiente expresión devolverá true:

{@code proxy instanceof Foo}

y la siguiente operación de conversión se realizará correctamente (en lugar de iniciar ):ClassCastException

{@code (Foo) proxy}

<li>Cada instancia de proxy tiene un controlador de invocación asociado, el que se pasó a su constructor. El método estático Proxy#getInvocationHandler Proxy.getInvocationHandler devolverá el controlador de invocación asociado a la instancia de proxy que se pasa como argumento.

<li>Una invocación de método de interfaz en una instancia de proxy se codificará y enviará al método del InvocationHandler#invoke invoke controlador de invocación, tal como se describe en la documentación de ese método.

<li>Una invocación de los hashCodemétodos , equalso toString declarados en en java.lang.Object una instancia de proxy se codificará y enviará al método del invoke controlador de invocación de la misma manera que las invocaciones de método de interfaz se codifican y envían, como se ha descrito anteriormente. La clase declarante del Method objeto pasado a invoke será java.lang.Object. Otros métodos públicos de una instancia de proxy heredada de java.lang.Object no se invalidan mediante una clase de proxy, por lo que las invocaciones de esos métodos se comportan como lo hacen para instancias de java.lang.Object. </ul>

<h3>Métodos duplicados en varias interfaces< de proxy/h3>

Cuando dos o más interfaces de una clase de proxy contienen un método con el mismo nombre y la misma firma de parámetro, el orden de las interfaces de la clase proxy se convierte en significativo. Cuando se invoca este método duplicado en una instancia de proxy, el Method objeto pasado al controlador de invocación no será necesariamente el que se pueda asignar a la clase declarante desde el tipo de referencia de la interfaz a la que se invocó el método del proxy. Esta limitación existe porque la implementación del método correspondiente en la clase de proxy generada no puede determinar a qué interfaz se invocó. Por lo tanto, cuando se invoca un método duplicado en una instancia de proxy, el Method objeto del método en la interfaz más importante que contiene el método (ya sea directamente o heredado a través de un superinterface) en la lista de interfaces de la clase proxy se pasa al método del controlador de invocación, independientemente del tipo de referencia a través del invoke cual se produjo la invocación del método.

Si una interfaz de proxy contiene un método con el mismo nombre y la misma firma de parámetro que los hashCodemétodos , equalso toString de java.lang.Object, cuando se invoca un método de este tipo en una instancia de proxy, el Method objeto pasado al controlador de invocación tendrá java.lang.Object como clase declarante. Es decir, los métodos públicos y no finales de java.lang.Object preceden lógicamente a todas las interfaces de proxy para la determinación del objeto que Method se va a pasar al controlador de invocación.

Tenga en cuenta también que, cuando se envía un método duplicado a un controlador de invocación, el invoke método solo puede iniciar tipos de excepción comprobados que se puedan asignar a uno de los tipos de excepción de la throws cláusula del método en todas las interfaces proxy a las que se puede invocar. Si el invoke método produce una excepción comprobada que no se puede asignar a ninguno de los tipos de excepción declarados por el método en una de las interfaces de proxy a las que se puede invocar, la invocación de la instancia de proxy generará una desactivación UndeclaredThrowableException . Esta restricción significa que no todos los tipos de excepción devueltos invocando getExceptionTypes en el Method objeto pasado al invoke método pueden iniciarse necesariamente correctamente por el invoke método.

Se agregó en la versión 1.3.

Documentación de Java para java.lang.reflect.Proxy.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código y se usan según los términos descritos en la creative Commons 2.5.

Constructores

Proxy(IInvocationHandler)

Construye una nueva Proxy instancia de una subclase (normalmente, una clase de proxy dinámico) con el valor especificado para su controlador de invocación.

Proxy(IntPtr, JniHandleOwnership)

Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el entorno de ejecución.

Propiedades

Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
H

controlador de invocación para esta instancia de proxy.

Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
JniIdentityHashCode

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
JniPeerMembers

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

PeerReference

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

Métodos

Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
Dispose()

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
Dispose(Boolean)

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
GetHashCode()

Devuelve un valor de código hash del objeto.

(Heredado de Object)
GetInvocationHandler(Object)

Devuelve el controlador de invocación de la instancia de proxy especificada.

GetProxyClass(ClassLoader, Class[])

Devuelve el java.lang.Class objeto de una clase de proxy dada una clase loader y una matriz de interfaces.

IsProxyClass(Class)

Devuelve true si y solo si la clase especificada se generó dinámicamente para ser una clase proxy mediante el getProxyClass método o el newProxyInstance método .

JavaFinalize()

Llamado por el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto.

(Heredado de Object)
NewProxyInstance(ClassLoader, Class[], IInvocationHandler)

Devuelve una instancia de una clase de proxy para las interfaces especificadas que distribuye las invocaciones de método al controlador de invocación especificado.

Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
ToArray<T>()

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto.

(Heredado de Object)
UnregisterFromRuntime()

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em> o <em>interrumpido</em>.<><

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <notificado<>/em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <notificado<>/em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)

Implementaciones de interfaz explícitas

IJavaPeerable.Disposed()

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
IJavaPeerable.DisposeUnlessReferenced()

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
IJavaPeerable.Finalized()

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
IJavaPeerable.JniManagedPeerState

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

(Heredado de Object)

Métodos de extensión

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

GetJniTypeName(IJavaPeerable)

Proxy proporciona métodos estáticos para crear clases y instancias de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicos creadas por esos métodos.

Se aplica a