Según the documentation:Alternativas a java.lang.reflect.Proxy para la creación de proxies de clases abstractas (en lugar de las interfaces)
[
java.lang.reflect.
]Proxy
proporciona métodos estáticos para Creación de clases dinámicas proxy y casos, y también es la superclase de todas las clases de proxy dinámico creadas por esos métodos.
El newProxyMethod
method (responsable de generar los proxies dinámicos) tiene la siguiente firma:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Desafortunadamente, esto evita que uno genera un proxy dinámico que extiende una clase abstracta específica (en lugar de implementando interfaces específicas). Esto tiene sentido, considerando que java.lang.reflect.Proxy
es "la superclase de todos los proxies dinámicos", lo que impide que otra clase sea la superclase.
Por lo tanto, ¿hay alguna alternativa a java.lang.reflect.Proxy
que puede generar proxies dinámicos que heredan de una clase abstracta específica, volviendo a dirigir todas las llamadas a los métodos abstractos al controlador de invocación?
Por ejemplo, supongamos que tengo una clase abstracta Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
¿Hay una clase que me permite hacer lo siguiente?
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
+1: ¡Exactamente lo que necesito! Editaré tu respuesta con mi código de muestra. –
'proxyFactory.setHandler()' está en desuso. Por favor use 'proxy.setHandler'. –