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
。理由がわからないのですが、どなたか教えていただけないでしょうか?どうもありがとう。