Proxy Klasse

Definition

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

[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
Vererbung
Proxy
Attribute
Implementiert

Hinweise

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

So erstellen Sie einen Proxy für eine Schnittstelle 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);

oder einfacher:

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

Eine dynamische Proxyklasse (unten einfach als Proxyklasse bezeichnet) ist eine Klasse, die eine Liste von Schnittstellen implementiert, die zur Laufzeit angegeben sind, wenn die Klasse erstellt wird, wobei das Verhalten wie unten beschrieben wird.

Eine Proxyschnittstelle ist eine solche Schnittstelle, die von einer Proxyklasse implementiert wird.

Ein Proxy-instance ist ein instance einer Proxyklasse.

Jeder Proxy instance verfügt über ein zugeordnetes Aufrufhandlerobjekt, das die Schnittstelle InvocationHandlerimplementiert. Ein Methodenaufruf für einen Proxy instance über eine seiner Proxyschnittstellen wird an die InvocationHandler#invoke invoke Methode des Aufrufhandlers des instance gesendet. Dabei wird der Proxy-instance übergeben, ein java.lang.reflect.Method Objekt, das die aufgerufene Methode identifiziert, und ein Array vom TypObject, das die Argumente enthält. Der Aufrufhandler verarbeitet den codierten Methodenaufruf entsprechend, und das zurückgegebene Ergebnis wird als Ergebnis des Methodenaufrufs für den Proxy instance zurückgegeben.

Eine Proxyklasse verfügt über die folgenden Eigenschaften:

<ul><li>Proxyklassen sind <öffentlich>, final und nicht abstrakt<,> wenn alle Proxyschnittstellen öffentlich sind.</Li>

<li-Proxyklassen>sind <nicht>öffentlich, endgültig und nicht abstrakt</em> , wenn eine der Proxyschnittstellen nicht öffentlich ist.</Li>

<li>Der nicht qualifizierte Name einer Proxyklasse ist nicht angegeben. Der Leerraum der Klassennamen, die mit der Zeichenfolge "$Proxy" beginnen, sollte jedoch für Proxyklassen reserviert sein.

<li>Eine Proxyklasse erweitert java.lang.reflect.Proxy.

<li>Eine Proxyklasse implementiert genau die Bei ihrer Erstellung angegebenen Schnittstellen in der gleichen Reihenfolge.

<li>Wenn eine Proxyklasse eine nicht öffentliche Schnittstelle implementiert, wird sie im selben Paket wie diese Schnittstelle definiert. Andernfalls ist das Paket einer Proxyklasse ebenfalls nicht angegeben. Beachten Sie, dass die Paketversiegelung nicht verhindert, dass eine Proxyklasse zur Laufzeit erfolgreich in einem bestimmten Paket definiert wird, und dass keine Klassen bereits durch denselben Klassenladeer und dasselbe Paket mit bestimmten Signierern definiert werden.

<li>Da eine Proxyklasse alle schnittstellen implementiert, die bei ihrer Erstellung angegeben sind, gibt der Aufruf getInterfaces für ihr Class Objekt ein Array zurück, das dieselbe Liste von Schnittstellen enthält (in der bei der Erstellung angegebenen Reihenfolge), wird beim Aufrufen getMethodsClass des Objekts ein Array von Method Objekten zurückgegeben, die alle Methoden in diesen Schnittstellen enthalten, und beim Aufrufen getMethod von Methoden in den Proxyschnittstellen wird wie erwartet nach Methoden in den Proxyschnittstellen gesucht.

<li>Die Proxy#isProxyClass Proxy.isProxyClass Methode gibt true zurück, wenn eine Proxyklasse übergeben wird – eine Klasse, die von Proxy.getProxyClass oder die Klasse eines von zurückgegebenen Objekts zurückgegeben wird Proxy.newProxyInstance, und andernfalls false.

<li>Die java.security.ProtectionDomain einer Proxyklasse ist identisch mit dem von Systemklassen, die vom Bootstrap-Klassenladeprogramm geladen werden, z java.lang.Object. B. , da der Code für eine Proxyklasse durch vertrauenswürdigen Systemcode generiert wird. Dieser Schutzdomäne wird in der Regel gewährt java.security.AllPermission.

<li>Jede Proxyklasse verfügt über einen öffentlichen Konstruktor, der ein Argument, eine Implementierung der SchnittstelleInvocationHandler, verwendet, um den Aufrufhandler für einen Proxy instance festzulegen. Anstatt die Reflektions-API für den Zugriff auf den öffentlichen Konstruktor verwenden zu müssen, kann auch ein Proxy instance erstellt werden, indem die Proxy#newProxyInstance Proxy.newProxyInstance -Methode aufgerufen wird, die die Aktionen des Aufrufens Proxy#getProxyClass Proxy.getProxyClass mit dem Aufrufen des Konstruktors mit einem Aufrufhandler kombiniert. </ul>

Ein Proxy instance verfügt über die folgenden Eigenschaften:

<ul><li>Bei einem Proxy instance proxy und einer der Schnittstellen, die von seiner Proxyklasse Fooimplementiert werden, gibt der folgende Ausdruck true zurück:

{@code proxy instanceof Foo}

und der folgende Umwandlungsvorgang erfolgreich ist (anstatt ein ClassCastExceptionzu auslösen):

{@code (Foo) proxy}

<li>Jeder Proxy instance verfügt über einen zugeordneten Aufrufhandler, der an den Konstruktor übergeben wurde. Die statische Proxy#getInvocationHandler Proxy.getInvocationHandler Methode gibt den Aufrufhandler zurück, der dem Proxy zugeordnet instance als Argument übergeben wird.

<li>Ein Schnittstellenmethodenaufruf für einen Proxy instance wird codiert und an die Methode des Aufrufhandlers InvocationHandler#invoke invoke gesendet, wie in der Dokumentation für diese Methode beschrieben.

<li>Ein Aufruf der - oder -Methoden, equalstoString die hashCodein java.lang.Object in einem Proxy-instance deklariert sind, wird codiert und an die Methode des Aufrufhandlers invoke auf die gleiche Weise wie Schnittstellenmethodenaufrufe codiert und gesendet, wie oben beschrieben. Die deklarierende Klasse des Method an invoke übergebenen Objekts ist java.lang.Object. Andere öffentliche Methoden eines Proxys, von java.lang.Object instance geerbt werden, werden nicht von einer Proxyklasse überschrieben. Aufrufe dieser Methoden verhalten sich also wie bei Instanzen von java.lang.Object. </ul>

<h3-Methoden>dupliziert in mehreren Proxyschnittstellen</h3>

Wenn mindestens zwei Schnittstellen einer Proxyklasse eine Methode mit demselben Namen und der gleichen Parametersignatur enthalten, wird die Reihenfolge der Schnittstellen der Proxyklasse signifikant. Wenn eine solche doppelte Methode auf einem Proxy-instance aufgerufen wird, ist das Method an den Aufrufhandler übergebene Objekt nicht unbedingt das Objekt, dessen deklarierende Klasse vom Verweistyp der Schnittstelle zugewiesen werden kann, über die die Methode des Proxys aufgerufen wurde. Diese Einschränkung besteht, da die entsprechende Methodenimplementierung in der generierten Proxyklasse nicht bestimmen kann, über welche Schnittstelle sie aufgerufen wurde. Wenn also eine doppelte Methode auf einem Proxy instance aufgerufen wird, wird das Method Objekt für die -Methode in der vorderen Schnittstelle, die die -Methode (entweder direkt oder über eine Superinterface geerbt) in der Liste der Schnittstellen der Proxyklasse enthält, an die Methode des Aufrufhandlers invoke übergeben, unabhängig vom Verweistyp, über den der Methodenaufruf erfolgt ist.

Wenn eine Proxyschnittstelle eine Methode mit demselben Namen und der gleichen Parametersignatur enthält wie die hashCode- equalsoder toString -Methoden von java.lang.Object, wenn eine solche Methode auf einem Proxy instance aufgerufen wird, hat java.lang.Object das Method an den Aufrufhandler übergebene Objekt als deklarierende Klasse. Mit anderen Worten, die öffentlichen, nicht endgültigen Methoden von java.lang.Object gehen allen Proxyschnittstellen logisch voran, um zu bestimmen, welches Method Objekt an den Aufrufhandler übergeben werden soll.

Beachten Sie außerdem, dass beim Senden einer doppelten Methode an einen Aufrufhandler die invoke Methode möglicherweise nur überprüfte Ausnahmetypen auslöst, die einem der Ausnahmetypen in der throws -Klausel der -Methode in allen Proxyschnittstellen zugewiesen werden können, über die sie aufgerufen werden kann. Wenn die invoke -Methode eine aktivierte Ausnahme auslöst, die keinem der von der -Methode deklarierten Ausnahmetypen in einer der Proxyschnittstellen zuweist, über die sie aufgerufen werden kann, wird durch den Aufruf auf dem Proxy instance ein deaktivierter UndeclaredThrowableException Wert ausgelöst. Diese Einschränkung bedeutet, dass nicht alle Ausnahmetypen, die vom Aufrufen getExceptionTypes des an die Methodinvoke -Methode übergebenen Objekts zurückgegeben werden, notwendigerweise erfolgreich von der invoke -Methode ausgelöst werden können.

In Version 1.3 hinzugefügt.

Java-Dokumentation für java.lang.reflect.Proxy.

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

Proxy(IInvocationHandler)

Erstellt eine neue Proxy instance aus einer Unterklasse (in der Regel eine dynamische Proxyklasse) mit dem angegebenen Wert für den Aufrufhandler.

Proxy(IntPtr, JniHandleOwnership)

Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Runtime aufgerufen.

Eigenschaften

Class

Gibt die Laufzeitklasse dieses Objectzurück.

(Geerbt von Object)
H

der Aufrufhandler für diesen Proxy instance.

Handle

Das Handle zum zugrunde liegenden Android-instance.

(Geerbt von Object)
JniIdentityHashCode

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
JniPeerMembers

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

PeerReference

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

Methoden

Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
Dispose()

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
Dispose(Boolean)

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
Equals(Object)

Gibt an, ob ein anderes Objekt diesem "gleich" ist.

(Geerbt von Object)
GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
GetInvocationHandler(Object)

Gibt den Aufrufhandler für die angegebene Proxy-instance zurück.

GetProxyClass(ClassLoader, Class[])

Gibt das java.lang.Class Objekt für eine Proxyklasse mit einem Klassenladeprogramm und einem Array von Schnittstellen zurück.

IsProxyClass(Class)

Gibt true zurück, wenn die angegebene Klasse dynamisch als Proxyklasse mit der getProxyClass -Methode oder - newProxyInstance Methode generiert wurde.

JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind.

(Geerbt von Object)
NewProxyInstance(ClassLoader, Class[], IInvocationHandler)

Gibt eine instance einer Proxyklasse für die angegebenen Schnittstellen zurück, die Methodenaufrufe an den angegebenen Aufrufhandler sendet.

Notify()

Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten.

(Geerbt von Object)
SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
ToArray<T>()

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel durch em benachrichtigen/em> oder <em>interrupted</em>.<><

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
IJavaPeerable.Finalized()

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine Für Android-Runtime überprüfte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

GetJniTypeName(IJavaPeerable)

Proxy stellt statische Methoden zum Erstellen dynamischer Proxyklassen und -instanzen bereit und ist auch die Superklasse aller dynamischen Proxyklassen, die von diesen Methoden erstellt wurden.

Gilt für: