Selon la documentation :
[
java.lang.reflect.
]Proxy
fournit des méthodes statiques pour créer des classes et des instances proxy dynamiques, et c'est aussi la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.
La newProxyMethod
méthode (chargée de générer les proxies dynamiques) a la signature suivante:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Malheureusement, cela empêche de générer un proxy dynamique qui étend une classe abstraite spécifique (plutôt que d' implémenter des interfaces spécifiques). Cela a du sens, étant donné que java.lang.reflect.Proxy
c'est "la superclasse de tous les proxys dynamiques", empêchant ainsi une autre classe d'être la superclasse.
Par conséquent, existe-t-il des alternatives à java.lang.reflect.Proxy
cela qui peuvent générer des proxys dynamiques qui héritent d'une classe abstraite spécifique, redirigeant tous les appels vers les méthodes abstraites vers le gestionnaire d'invocation?
Par exemple, supposons que j'ai une classe abstraite Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Y a-t-il un cours qui me permet de faire ce qui suit?
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