weixin_42356882 2010-03-24 01:32
浏览 189
已采纳

java.lang.StackOverflowError

用spring aop拦截参数,参数可能是对象,于是我重载了对象的tostring方法,用反射取出对象的属性值代码如下:
public class BaseBean {
/**
*
*/
private static final long serialVersionUID = 1L;

public String toString() {
String s = "";
try {

s = getPropertyString(this);//获取对象属性值
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
public String getPropertyString(Object entityName) throws Exception {
    String methodname=null;
    Method method = null;
Class c = entityName.getClass();
Field field[] = c.getDeclaredFields();
StringBuffer sb = new StringBuffer();
for (Field f : field) {
    if(!f.getName().equals("serialVersionUID" )){
        methodname=f.getName().substring(0, 1).toUpperCase()+ f.getName().substring(1);//取得方法名称
        method=c.getMethod("get"+methodname);//取得方法
sb.append(method.invoke(entityName));//调用方法并把得到的值相加


    }

}
    entityName=null;
System.gc();//销毁对象
return sb.toString();
}

直接测试的时候没问题,测试代码:
public class Test {
public static void main(String[] args){
for(int i=0;i<10;i++){
User user=new User();
user.setUsername("yyy");
user.setAddress("zzz");
System.out.println(user.toString());
}
}

}
但是放在AOP中就出现java.lang.StackOverflowError异常,提示是Field field[] =c.getDeclaredFields();sb.append(method.invoke(entityName));这两行出错;
还有个奇怪的信息:at java.util.AbstractCollection.toString(Unknown Source)
at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:310)
不知道关hibernate什么事情,spring拦截代码如下:
public void charcheck(JoinPoint joinpoint){
Object[] obj=joinpoint.getArgs();
System.out.println(obj[0].toString());
}

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2010-03-24 10:32
    关注

    抛出异常当然就中断了线程,你还可以设置线程异常处理器

    public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)设置该线程由于未捕获到异常而突然终止时调用的处理程序。
    通过明确设置未捕获到的异常处理程序,线程可以完全控制它对未捕获到的异常作出响应的方式。如果没有设置这样的处理程序,则该线程的 ThreadGroup 对象将充当其处理程序。

    参数:
    eh - 用作该线程未捕获到的异常处理程序的对象。如果为 null,则该线程没有明确的处理程序。

    这种方式适用于你还要去异常处理的情况,好像还蛮符合你现在的情况

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)