Dynamische Proxies optimal nutzen

Seit Java SE 1.3 sind dynamische Proxies bereits Bestandteil von Java. Und so definiert sie die Javadoc für die Klasse Proxy: „Eine Klasse dynamischer Proxies ist eine Klasse, die eine Liste von Schnittstellen zur Laufzeit implementiert, wenn die Klasse erzeugt wird.“

Das bedeutet, dass man eine Klasse zur Laufzeit erzeugen kann, die ein oder mehrere Schnittstellen implementiert, die man zur Laufzeit spezifiziert. Diese Funktionalität wird man nicht jeden Tag benötigen, aber sie ist nützlich, wenn man ein Test-Framework oder eine Objekt-Harness entwickelt.

Wie dynamische Proxies funktionieren

Dynamisch Proxies bestehen aus zwei Teilen: einem Invocation-Handler und einer Proxy-Instanz. Ein Invocation-Handler ist eine Klasse, die die Schnittstelle java.lang.reflect.InvocationHandler implementiert. Dies ist die Klasse, welche die von den Schnittstellen – die durch die Proxy-Instanz definierten wurden – angefragten Aufgaben erledigt oder weiterleitet. Die Proxy-Instanz ist ein Objekt, das der Methode übergeben wird, die den zu emulierenden Typ anfordert.

Um einen Proxy zu erstellen, der eine Liste von Schnittstellen implementiert, verwendet man die statische Methode newProxyInstance() der Proxy-Klasse. Die Methode newProxyInstance() akzeptiert drei Argumente: eine Instanz von ClassLoader, ein Array von Klassen-Instanzen sowie eine Instanz von InvocationHandler. Das Array von Klassen bestimmt, welche Schnittstellen die neue Proxy-Instanz implementieren wird, und der InvocationHandler wird aufgerufen, wenn Methoden für die Proxy-Instanz aufgerufen werden.

Das folgende einfache Beispiel erzeugt eine Klasse zur Laufzeit und implementiert entweder das java.lang.Runnable oder die lokal definierte Publisher-Schnittstelle:

Eine Einschränkung von Proxies besteht darin, dass nur Schnittstellen über einen Proxy delegiert werden können. Falls man versucht, einen Proxy für einen anderen Typ als eine Schnittstelle zu erstellen, erhält man eine Exception wie diese:

Der Leistungsfähigkeit von dynamischen Proxies sind nur vom eigenen Erfindungsreichtum und den zur Verfügung stehenden Schnittstellen Grenzen gesetzt. Für weitere Informationen darüber, was man beim Einsatz von Proxies beachten muss, sollte man die Javadoc konsultieren.

ZDNet.de Redaktion

Recent Posts

Studie: Ein Drittel aller E-Mails an Unternehmen sind unerwünscht

Der Cybersecurity Report von Hornetsecurity stuft 2,3 Prozent der Inhalte gar als bösartig ein. Die…

11 Stunden ago

HubPhish: Phishing-Kampagne zielt auf europäische Unternehmen

Die Hintermänner haben es auf Zugangsdaten zu Microsoft Azure abgesehen. Die Kampagne ist bis mindestens…

1 Tag ago

1. Januar 2025: Umstieg auf E-Rechnung im B2B-Geschäftsverkehr

Cloud-Plattform für elektronische Beschaffungsprozesse mit automatisierter Abwicklung elektronischer Rechnungen.

1 Tag ago

Google schließt schwerwiegende Sicherheitslücken in Chrome 131

Mindestens eine Schwachstelle erlaubt eine Remotecodeausführung. Dem Entdecker zahlt Google eine besonders hohe Belohnung von…

1 Tag ago

Erreichbarkeit im Weihnachtsurlaub weiterhin hoch

Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…

2 Tagen ago

Hacker missbrauchen Google Calendar zum Angriff auf Postfächer

Security-Experten von Check Point sind einer neuen Angriffsart auf die Spur gekommen, die E-Mail-Schutzmaßnahmen umgehen…

3 Tagen ago