문서 에 따르면 :
[
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