前端琅琊阁 2014-05-16 08:53 采纳率: 0%
浏览 11999

java动态代理测试报错

今天突然看到spring aop,想到代理模式,就写了个动态代理的例子,但是有点不遂人愿,出错了,各位大牛帮我看下哪里错了.

程序里头可能是有死循环或递归调用所产生的?增大JVM的内存?

public interface Subject {

void opration();

}

public class RealSubject implements Subject {

@Override
public void opration() {
    System.out.println("I am a RealSubject");

}

}

public class ProxyInvocationHandler implements InvocationHandler {

private Object beProxy;

public ProxyInvocationHandler(Object beProxy) {
    super();
    this.beProxy = beProxy;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

    System.out.println("proxy class:" + proxy + "proxy method:" + method);

    return method.invoke(beProxy, args);
}

}

public class TestDynamicProxy {

public static void main(String[] args) {
    Subject proxyClass = (Subject) Proxy.newProxyInstance(Subject.class.getClassLoader(),
            new Class[] { Subject.class }, 
            new ProxyInvocationHandler(new RealSubject()));
    proxyClass.opration();

}

}

Exception in thread "main" java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.(AbstractStringBuilder.java:44)
at java.lang.StringBuilder.(StringBuilder.java:92)
at com.test.dynamic.proxy.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:32)
at com.sun.proxy.$Proxy0.toString(Unknown Source)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at com.test.dynamic.proxy.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:32)
at com.sun.proxy.$Proxy0.toString(Unknown Source)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at com.test.dynamic.proxy.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:32)
at com.sun.proxy.$Proxy0.toString(Unknown Source)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)

  • 写回答

3条回答

  • lymoge 2014-05-16 09:45
    关注

    proxy.toString()递归调用InvocationHandler的invoke方法,导致堆栈溢出。搜一下$Proxy0的源码就知道。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题