Hallo,
ich bin gerade dabei, Java zu lernen und nun auf das Thema Dynamic Proxy gestoßen. Mir ist aufgefallen, dass in sämtlichen Beispielen, die ich gefunden habe, die Originalklasse, für die das Proxy-Objekt erstellt wird, zuvor ein Interface implementiert haben. Dabei meine ich natürlich nicht das InvocationHandler-If, sondern "static class Original implements If" aus dem Beispiel unten.
Bei den anderen Beispielen, die ich als Beispiele hatte, war das auch so. Ich habe daher aus Neugier mal das Interface If entfernt, etwa so:
Bei diesem geänderten Code erhalte ich bei Ausführung eine Fehlermeldung java.lang.IllegalArgumentException. Kann mir jemand weiterhelfen?
ich bin gerade dabei, Java zu lernen und nun auf das Thema Dynamic Proxy gestoßen. Mir ist aufgefallen, dass in sämtlichen Beispielen, die ich gefunden habe, die Originalklasse, für die das Proxy-Objekt erstellt wird, zuvor ein Interface implementiert haben. Dabei meine ich natürlich nicht das InvocationHandler-If, sondern "static class Original implements If" aus dem Beispiel unten.
Java:
public class JdkProxyDemo {
interface If {
void originalMethod(String s);
}
static class Original implements If {
public void originalMethod(String s) {
System.out.println(s);
}
}
static class Handler implements InvocationHandler {
private final If original;
public Handler(If original) {
this.original = original;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
System.out.println("BEFORE");
method.invoke(original, args);
System.out.println("AFTER");
return null;
}
}
public static void main(String[] args){
Original original = new Original();
Handler handler = new Handler(original);
If f = (If) Proxy.newProxyInstance(If.class.getClassLoader(),
new Class[] { If.class },
handler);
f.originalMethod("Hallo");
}
}
Bei den anderen Beispielen, die ich als Beispiele hatte, war das auch so. Ich habe daher aus Neugier mal das Interface If entfernt, etwa so:
Java:
public class JdkProxyDemo {
static class Original {
public void originalMethod(String s) {
System.out.println(s);
}
}
static class Handler implements InvocationHandler {
private Original original;
public Handler( Original original) {
this.original = original;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
System.out.println("BEFORE");
method.invoke(original, args);
System.out.println("AFTER");
return null;
}
}
public static void main(String[] args){
Original original = new Original();
Handler handler = new Handler(original);
original = (Original) Proxy.newProxyInstance(Original.class.getClassLoader(),
new Class[] { Original.class },
handler);
original.originalMethod("Hallo");
}
}
Bei diesem geänderten Code erhalte ich bei Ausführung eine Fehlermeldung java.lang.IllegalArgumentException. Kann mir jemand weiterhelfen?
Zuletzt bearbeitet von einem Moderator: