Альтернативы java.lang.reflect.Proxy для создания прокси абстрактных классов (а не интерфейсов)
В соответствии сдокументация:
[java.lang.reflect.
]Proxy
предоставляет статические методы для создания динамических прокси-классов и экземпляров, а также является суперклассом всех динамических прокси-классов, создаваемых этими методами.
newProxyMethod
метод (отвечает за генерацию динамических прокси) имеет следующую подпись:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
К сожалению, это не позволяет генерировать динамический прокси, которыйпродолжается определенный абстрактный класс (а нереализации конкретные интерфейсы). Это имеет смысл, учитываяjava.lang.reflect.Proxy
является «суперклассом всех динамических прокси», тем самым не давая другому классу быть суперклассом.
Поэтому есть ли альтернативыjava.lang.reflect.Proxy
которые могут генерировать динамические прокси, которыеунаследовать из определенного абстрактного класса, перенаправляя все вызовы наАннотация методы к обработчику вызовов?
Например, предположим, у меня есть абстрактный классDog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Есть ли класс, который позволяет мне делать следующее?
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