继承自RuntimeException的都不用捕获或者再次抛出,例如 NullPointerException IllegalArgumentException
Error也不用,不过Error不建议程序中捕获,因为抛出Error一般都是些严重的错误。
《Spring in Action》说到 DataAccessException ,这个异常是spring DAO层异常的父类。也是继承的RuntimeException
ibaits的SqlMapExecutor会抛出SQLException,你拿到了SQLException后还要catch或是往上throw,
Hibernate 抛的HibernateException 则让你的应用代码跟hibernate耦合了。
spring说:异常检测会使你的代码到处是不相关的catch或thorws语句,使代码杂乱无章,并且这些异常往往是不可恢复的(例如无法连接数据库.无效的字段名等等),所以并不强制你去处理它们。
SqlMapClientTempalte这个类在execute的时候会调用ibatis的SqlMapExecutor去执行数据库操作,有可能抛出SQLException
catch (SQLException ex) {
throw getExceptionTranslator().translate("SqlMapClient operation", null, ex);
}
spring捕获SQLException 并根据情况抛出继承DataAccessException 的异常,例如:BadSqlGrammarException等。。
你的应用可以选择捕不捕获,或捕获相应的异常去做相应的处理
这篇文章也对异常机制做了很好的讨论 http://www.iteye.com/topic/72170