Hallo,
ich schau mir grade die Reflection API an und versuche grad das mit dem Proxy und InvocationHandler zu verstehen.
Ich hab´s mal mit folgendem Beispiel versucht, aber ich mach irgendwas falsch.
Ich bekomm beim InvocationHandler immer die Exception
[Java]
at FooHandler.invoke(FooHandler.java:14)
at $Proxy0.doSomeAction(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
[/code]
Was muss ich denn anders machen?
Ich wäre echt dankbar über etwas hilfe.
ich schau mir grade die Reflection API an und versuche grad das mit dem Proxy und InvocationHandler zu verstehen.
Ich hab´s mal mit folgendem Beispiel versucht, aber ich mach irgendwas falsch.
Ich bekomm beim InvocationHandler immer die Exception
[Java]
at FooHandler.invoke(FooHandler.java:14)
at $Proxy0.doSomeAction(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
[/code]
Java:
public class Test {
public static void main(String[] args) {
Foo foo = (Foo) FooProxy.newInstance(new FooImpl());
foo.doSomeAction(new Object());
}
}
Java:
public interface Foo {
Object doSomeAction(Object obj);
}
Java:
public class FooImpl implements Foo{
@Override
public Object doSomeAction(Object obj) {
System.out.println("tu was");
return new Object();
}
}
Java:
public class FooProxy {
private Object obj;
public static Object newInstance(Object obj) {
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new FooHandler());
}
private FooProxy(Object obj) {
this.obj = obj;
}
}
Java:
public class FooHandler implements InvocationHandler {
@Override
public Object invoke(Object obj, Method m, Object[] args) throws Throwable {
Object result = null;
try {
System.out.println("before method " + m.getName());
result = m.invoke(obj, args);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (Exception e){
} finally {
System.out.println("after method " + m.getName());
}
return result;
}
}
Was muss ich denn anders machen?
Ich wäre echt dankbar über etwas hilfe.
Zuletzt bearbeitet: