Alternativas ao java.lang.reflect.Proxy para criar proxies de classes abstratas (em vez de interfaces)
De acordo coma documentação:
[java.lang.reflect.
]Proxy
fornece métodos estáticos para criar instâncias e classes de proxy dinâmicas e também é a superclasse de todas as classes de proxy dinâmico criadas por esses métodos.
onewProxyMethod
método (responsável por gerar os proxies dinâmicos) tem a seguinte assinatura:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Infelizmente, isso impede a geração de um proxy dinâmico queestende uma classe abstrata específica (em vez deimplementação interfaces específicas). Isso faz sentido, considerandojava.lang.reflect.Proxy
é "a superclasse de todos os proxies dinâmicos", impedindo que outra classe seja a superclasse.
Portanto, existem alternativas parajava.lang.reflect.Proxy
que pode gerar proxies dinâmicos queherdar de uma classe abstrata específica, redirecionando todas as chamadas para oabstrato métodos para o manipulador de invocação?
Por exemplo, suponha que eu tenha uma classe abstrataDog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Existe uma classe que me permita fazer o seguinte?
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