Alternative zu java.lang.reflect.Proxy zum Erstellen von Proxys abstrakter Klassen (anstelle von Interfaces)
Gemäßdie Dokumentatio:
[java.lang.reflect.
]Proxy
bietet statische Methoden zum Erstellen dynamischer Proxy-Klassen und -Instanzen und ist außerdem die Oberklasse aller von diesen Methoden erstellten dynamischen Proxy-Klassen.
DasnewProxyMethod
Method (verantwortlich für die Generierung der dynamischen Proxys) hat die folgende Signatur:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Leider verhindert dies, dass ein dynamischer Proxy generiert wird, dererweiter eine bestimmte abstrakte Klasse (anstatt implementieren spezifische Schnittstellen). Dies ist sinnvoll, wenn man bedenkt,java.lang.reflect.Proxy
ist "die Oberklasse aller dynamischen Proxys", wodurch verhindert wird, dass eine andere Klasse die Oberklasse ist.
Daher gibt es Alternativen zujava.lang.reflect.Proxy
das kann dynamische Proxys erzeugen, dieerbe von einer bestimmten abstrakten Klasse, wobei alle Aufrufe an das @ umgeleitet werdabstrak Methoden zum Aufrufhandler?
Angenommen, ich habe eine abstrakte KlasseDog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Gibt es eine Klasse, mit der ich Folgendes ausführen kann?
Dog dog = SomeOtherProxy.newProxyInstance(classLoader, Dog.class, h);
dog.fetch(); // Will be handled by the invocation handler
dog.bark(); // Will NOT be handled by the invocation handler