Theo tài liệu :
[
java.lang.reflect.
]Proxy
cung cấp các phương thức tĩnh để tạo các lớp và thể hiện proxy động, và nó cũng là lớp cha của tất cả các lớp proxy động được tạo bởi các phương thức đó.
Các newProxyMethod
phương pháp (có trách nhiệm để tạo ra các proxy động) có chữ ký sau đây:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Thật không may, điều này ngăn người ta tạo proxy động mở rộng một lớp trừu tượng cụ thể (thay vì triển khai các giao diện cụ thể). Điều này có ý nghĩa, việc xem xét java.lang.reflect.Proxy
là "lớp cha của tất cả proxy động", do đó ngăn chặn một lớp khác là lớp cha.
Do đó, có bất kỳ giải pháp thay thế java.lang.reflect.Proxy
nào có thể tạo proxy động kế thừa từ một lớp trừu tượng cụ thể, chuyển hướng tất cả các lệnh gọi đến các phương thức trừu tượng đến trình xử lý lệnh gọi không?
Ví dụ: giả sử tôi có một lớp trừu tượng Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Có lớp học nào cho phép tôi làm những điều sau không?
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