1
public class PracticeJavassist2 {
@Test
public void test2() throws InstantiationException, IllegalAccessException{
ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(JavassistClass.class);
// factory.setFilter(new MethodFilter() {
// public boolean isHandled(Method arg0) {
// if(arg0.getName().equals("getName")){
// return true;
// }
// return false;
// }
// });
Class<?> c = factory.createClass();
JavassistClass jc = (JavassistClass)c.newInstance();
((Proxy)jc).setHandler(new MethodHandler() {
public Object invoke(Object arg0, Method arg1, Method arg2, Object[] arg3)throws Throwable {
JavassistClass o = (JavassistClass)arg0;
o.setName("vincen");
System.out.println(o.getClass().getName());
return arg2.invoke(arg0, arg3);
}
});
System.out.println(jc.getName());
}
}
class JavassistClass{
private String name = "default";
public JavassistClass(){
name = "me";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
上面的代碼運行良好,如果我打開註釋塊。但如果像上面那樣運行,它會拋出異常,這是java.lang.StackOverflowError
。我不知道爲什麼,誰能爲我解釋?非常感謝。javassist例外