Langage

Proxy Classe

Définition

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

[Android.Runtime.Register("java/lang/reflect/Proxy", DoNotGenerateAcw=true)]
public class Proxy : Java.Lang.Object, IDisposable, 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
Héritage
Attributs
Implémente

Remarques

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

Pour créer un proxy pour une interface 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);

ou plus simplement :

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

Une classe proxy dynamique (simplement appelée classe proxy ci-dessous) est une classe qui implémente une liste d’interfaces spécifiées lors de l’exécution lorsque la classe est créée, avec le comportement décrit ci-dessous.

Une interface proxy est une interface telle qu’implémentée par une classe proxy.

Une instance proxy est une instance d’une classe proxy.

Chaque instance proxy a un objet de gestionnaire d’appel associé, qui implémente l’interface InvocationHandler. Un appel de méthode sur une instance proxy via l’une de ses interfaces proxy sera distribué à la InvocationHandler#invoke invoke méthode du gestionnaire d’appel de l’instance, en passant l’instance proxy, un java.lang.reflect.Method objet identifiant la méthode appelée et un tableau de types Object contenant les arguments. Le gestionnaire d’appel traite l’appel de méthode encodé selon les besoins et le résultat qu’il retourne sera retourné suite à l’appel de méthode sur l’instance proxy.

Une classe proxy a les propriétés suivantes :

<Les classes de proxy ul><li>sont <>publiques, finales et non abstraites</em> si toutes les interfaces proxy sont publiques.</li>

<Les classes de proxy li>sont <em>non publiques, finales et non abstraites</em> si l’une des interfaces proxy n’est pas publique.</li>

<li>Le nom non qualifié d’une classe proxy n’est pas spécifié. Toutefois, l’espace des noms de classes commençant par la chaîne "$Proxy" doit être réservé aux classes proxy.

<li>A classe proxy s’étend java.lang.reflect.Proxy.

<Li>A classe proxy implémente exactement les interfaces spécifiées lors de sa création, dans le même ordre.

<li>Si une classe proxy implémente une interface non publique, elle sera définie dans le même package que cette interface. Sinon, le package d’une classe proxy n’est pas spécifié. Notez que le scellement de package n’empêche pas une classe proxy d’être correctement définie dans un package particulier au moment de l’exécution, et aucune des classes déjà définies par le même chargeur de classes et le même package avec des signataires particuliers.

<li>Étant donné qu’une classe proxy implémente toutes les interfaces spécifiées lors de sa création, l’appel getInterfaces sur son Class objet retourne un tableau contenant la même liste d’interfaces (dans l’ordre spécifié lors de sa création), l’appel getMethods sur son Class objet retourne un tableau d’objets Method qui incluent toutes les méthodes de ces interfaces, et l’appel getMethod trouvera des méthodes dans les interfaces proxy comme prévu.

<li>La Proxy#isProxyClass Proxy.isProxyClass méthode retourne true si elle est passée à une classe proxy : une classe retournée par Proxy.getProxyClass ou la classe d’un objet retourné par Proxy.newProxyInstance-- et false sinon.

<li>La java.security.ProtectionDomain classe proxy est identique à celle des classes système chargées par le chargeur de classe bootstrap, par java.lang.Objectexemple, car le code d’une classe proxy est généré par du code système approuvé. Ce domaine de protection est généralement accordé java.security.AllPermission.

<li>Chaque classe proxy a un constructeur public qui accepte un argument, une implémentation de l’interface InvocationHandler, pour définir le gestionnaire d’appel pour une instance de proxy. Au lieu d’utiliser l’API de réflexion pour accéder au constructeur public, une instance proxy peut également être créée en appelant la Proxy#newProxyInstance Proxy.newProxyInstance méthode, qui combine les actions d’appel Proxy#getProxyClass Proxy.getProxyClass avec l’appel du constructeur avec un gestionnaire d’appel. </ul>

Une instance proxy a les propriétés suivantes :

<ul><li>Étant donné une instance proxy proxy et l’une des interfaces implémentées par sa classe Fooproxy, l’expression suivante retourne la valeur true :

{@code proxy instanceof Foo}

et l’opération de cast suivante réussit (au lieu de lever un ClassCastException) :

{@code (Foo) proxy}

<li>Chaque instance proxy a un gestionnaire d’appel associé, celui qui a été passé à son constructeur. La méthode statique Proxy#getInvocationHandler Proxy.getInvocationHandler retourne le gestionnaire d’appel associé à l’instance proxy passée en tant qu’argument.

<Li>Une méthode d’appel de méthode d’interface sur une instance proxy est encodée et distribuée à la méthode du InvocationHandler#invoke invoke gestionnaire d’appel, comme décrit dans la documentation de cette méthode.

<Li>Un appel de la hashCodeméthode , equalsou toString des méthodes déclarées sur java.lang.Object une instance proxy sera encodé et distribué à la méthode du invoke gestionnaire d’appel de la même manière que les appels de méthode d’interface sont encodés et distribués, comme décrit ci-dessus. La classe déclarante de l’objet Method passé invoke sera java.lang.Object. D’autres méthodes publiques d’une instance proxy héritée ne java.lang.Object sont pas remplacées par une classe proxy, de sorte que les appels de ces méthodes se comportent comme pour les instances de java.lang.Object. </ul>

<Méthodes h3>dupliquées dans plusieurs interfaces< proxy/h3>

Lorsque deux interfaces ou plus d’une classe proxy contiennent une méthode portant le même nom et la même signature de paramètre, l’ordre des interfaces de la classe proxy devient significatif. Lorsqu’une telle méthode dupliquée est appelée sur une instance de proxy, l’objet Method transmis au gestionnaire d’appel ne sera pas nécessairement celui dont la classe déclarante est assignable à partir du type de référence de l’interface via laquelle la méthode du proxy a été appelée. Cette limitation existe, car l’implémentation de méthode correspondante dans la classe proxy générée ne peut pas déterminer l’interface à laquelle elle a été appelée. Par conséquent, lorsqu’une méthode dupliquée est appelée sur une instance proxy, l’objet Method de la méthode dans l’interface la plus haute qui contient la méthode (directement ou héritée par le biais d’une superinterface) dans la liste d’interfaces de la classe proxy est transmis à la méthode du invoke gestionnaire d’appel, quel que soit le type de référence à travers lequel l’appel de méthode s’est produit.

Si une interface proxy contient une méthode portant le même nom et la même signature de paramètre que le hashCode, equalsou toString les méthodes de java.lang.Object, lorsqu’une telle méthode est appelée sur une instance proxy, l’objet Method passé au gestionnaire d’appel aura java.lang.Object comme classe déclarante. En d’autres termes, les méthodes publiques et non finales de java.lang.Object précédent logiquement toutes les interfaces proxy pour la détermination de l’objet Method à passer au gestionnaire d’appel.

Notez également que lorsqu’une méthode en double est distribuée à un gestionnaire d’appel, la invoke méthode peut uniquement lever des types d’exceptions vérifiés qui sont assignables à l’un des types d’exceptions dans la throws clause de la méthode dans toutes les interfaces proxy qu’il peut appeler. Si la invoke méthode lève une exception vérifiée qui n’est pas assignable à l’un des types d’exceptions déclarés par la méthode dans l’une des interfaces proxy qu’elle peut appeler, une exception non cochée UndeclaredThrowableException est levée par l’appel sur l’instance proxy. Cette restriction signifie que tous les types d’exceptions retournés par l’appel getExceptionTypes sur l’objet Method transmis à la invoke méthode peuvent nécessairement être levées avec succès par la invoke méthode.

Ajouté dans la version 1.3.

Java documentation pour java.lang.reflect.Proxy.

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

Constructeurs

Nom Description
Proxy(IInvocationHandler)

Construit une nouvelle Proxy instance à partir d’une sous-classe (généralement une classe proxy dynamique) avec la valeur spécifiée pour son gestionnaire d’appel.

Proxy(IntPtr, JniHandleOwnership)

Constructeur utilisé lors de la création de représentations managées d’objets JNI ; appelée par le runtime.

Propriétés

Nom Description
Class

Retourne la classe runtime de ce Object.

(Hérité de Object)
H

gestionnaire d’appel pour cette instance de proxy.

Handle

Handle de l’instance Android sous-jacente.

(Hérité de Object)
JniIdentityHashCode

Obtient le code de hachage d’identité affecté à cet homologue Java par le runtime d’interopérabilité.

(Hérité de Object)
JniManagedPeerState

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
JniPeerMembers

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

PeerReference

Obtient la référence d’objet JNI pour cet homologue Java.

(Hérité de Object)
ThresholdClass

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

ThresholdType

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

Méthodes

Nom Description
Clone()

Crée et retourne une copie de cet objet.

(Hérité de Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
Dispose()

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
Dispose(Boolean)

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
DisposeUnlessReferenced()

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
Equals(Object)

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
Equals(Object)

Indique si un autre objet est « égal à » celui-ci.

(Hérité de Object)
GetHashCode()

Retourne une valeur de code de hachage pour l'objet.

(Hérité de Object)
GetInvocationHandler(Object)

Retourne le gestionnaire d’appel pour l’instance de proxy spécifiée.

GetProxyClass(ClassLoader, Class[])

Retourne l’objet java.lang.Class d’une classe proxy en fonction d’un chargeur de classes et d’un tableau d’interfaces.

IsProxyClass(Class)

Retourne true si et uniquement si la classe spécifiée a été générée dynamiquement comme classe proxy à l’aide de la getProxyClass méthode ou de la newProxyInstance méthode.

JavaFinalize()

Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet.

(Hérité de Object)
NewProxyInstance(ClassLoader, Class[], IInvocationHandler)

Retourne une instance d’une classe proxy pour les interfaces spécifiées qui répartit les appels de méthode vers le gestionnaire d’appel spécifié.

Notify()

Réveille un thread unique qui attend le moniteur de cet objet.

(Hérité de Object)
NotifyAll()

Réveille tous les threads qui attendent le moniteur de cet objet.

(Hérité de Object)
SetHandle(IntPtr, JniHandleOwnership)

Définit la propriété Handle.

(Hérité de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
ToArray<T>()

Crée un tableau managé à partir de ce wrapper de tableau Java.

(Hérité de Object)
ToString()

Retourne une représentation de chaîne de l'objet.

(Hérité de Object)
UnregisterFromRuntime()

Annule l’inscription de cet homologue Java à partir du runtime d’interopérabilité.

(Hérité de Object)
Wait()

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<>

(Hérité de Object)
Wait(Int64, Int32)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)
Wait(Int64)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
IJavaPeerable.Disposed()

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
IJavaPeerable.Finalized()

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

(Hérité de JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

Méthodes d’extension

Nom Description
GetJniTypeName(IJavaPeerable)

Obtient le nom JNI du type de l’instance self.

JavaAs<TResult>(IJavaPeerable)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

JavaCast<TResult>(IJavaObject)

Effectue une conversion de type vérifiée par le runtime Android.

JavaCast<TResult>(IJavaObject)

Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

S’applique à