日期:2014-05-20  浏览次数:20698 次

java异常传播求教
现在看到很多开源框架的异常都是封装好的,比如struts,spring,都把Exception给封装成runtime exception,请教的问题是,
我怎么才能得到原来抛出的异常,比如一个异常时数据库异常SQLException,封装之后呢,就变成了HibernateDataAccessException,那能不能得到原来的异常信息,比如SQLException的信息,这个我想如果能获得的话,也应该是要运行时才能获得的吧,如果不能,为什么?

------解决方案--------------------
如果是人家catch了,然后没有进一步throw出来,或者改throw了一个其他异常出来,那么这个异常就被吞了,无法得到了。
运行时有一个获取的办法是使用AOP,在人家catch之前拦截异常。
------解决方案--------------------
探讨

一楼说得对,我其实就是用AOP拦截,但是像spring,一些代码直接就是写的catch(DataAcessException),这样AOP拦截的也是这个DataAcessException,能得到根源的那个Exception么,比如可能原来是数据库的一个异常,结果在这里它抓到的是DataAcessException,能不能追溯到原来的数据库异常?

------解决方案--------------------
这个好像不可以了,别人已经封装了,不过调用还是调用到了最原始的Exception
------解决方案--------------------
探讨
引用:
引用:

一楼说得对,我其实就是用AOP拦截,但是像spring,一些代码直接就是写的catch(DataAcessException),这样AOP拦截的也是这个DataAcessException,能得到根源的那个Exception么,比如可能原来是数据库的一个异常,结果在这里它抓到的是DataAcessExcepti……