`

从Spring和Hibernate的设计来理解合理的异常处理体系

阅读更多

 

关于在应用程序中如何设计合理的异常体系,在《深入浅出Hibernate》这本书中有一大段详细的论述,另外一些JAVA界的高人也先后发表过专门的文章来讨论这个问题,书中也给出的文章的链接。 

其实,通过Hibernate和Spring中对异常处理的态度,就可以看出一些好的设计原则。在Hibernate2的时候,调用Hibernate的API时必须处理一个CheckedException,这和使用JDBC时是一样的,Hibernate的作者在后来的一封Email中也承认多少是受了JDBC的影响。但是面对这种底层的异常,我们能做些什么呢?继续抛上去或者捕获后什么都不做。这样的做法只能使程序中充满了重复的没有太大意义的try...catch...代码,而其功能和一个UncheckedException没用太大差别。所以Spring包装了Hibernate后抛出了一个UnckeckedException。后来Hibernate也意识到抛出一个UncheckedException是一种更合适的做法,所以在Hibernate3中不再抛出CheckedException了。 

今天又看到了一个Spring的特性,更加说明了Spring在异常处理方面的思路和态度: 

默认的情况下,spring只有当unchecked exception被抛出时,才rollback事务。 
Java代码  收藏代码
  1. <property name="transactionAttributes">   
  2.     <props>   
  3.             <prop key="insert*">PROPAGATION_REQUIRED,- MyCheckedException,+MyUnCheckedException</prop>   
  4.             <prop key="update*">PROPAGATION_REQUIRED</prop>   
  5.             <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>   
  6.         </props>   
  7. </property>   
-MyCheckedException 指定如果方法抛出MyCheckedException或它的子类,事务将 会自动回滚。 
+MyUnCheckedException 指定如果方法抛出MyUnCheckedException或它的子类,事务仍将会提交。 

可我们的项目中是怎么做的呢? 

几乎在每一层的每一个方法中都try...catch一下,然后在catch代码块中抛出一个OAException,这个OAException是New出来的而且还是一个CheckedException,包含了一句简单的异常信息,如“数据访问出现错误……”。这样做的后果有两个,一是又回到了Hibernate2的那种异常处理方式,使代码变的复杂了,有时候只有一两行的代码就可以搞定的现在要写个十多行的异常处理代码。二是丢掉了原始的异常信息,这一点就更严重了,由于OAException是New出来的,所以只包含了简单的提示信息,而真正出现异常的原始信息却丢掉了。另外,从上面Spring事务的回滚机制来看,如果采用默认配置,事务都会变的形同虚设了。 

这种异常处理体系对程序员是一种痛苦,对程序设计来说是一种缺憾! 
分享到:
评论

相关推荐

    JSF+Spring+Hibernate的实例讲解

    本文将深入探讨如何利用JavaServer Faces (JSF)、Spring Framework 和 Hibernate 这三种流行的技术来构建一个实际的Web应用程序,并给出具体的应用实例——JCatalog,在线产品目录系统。 #### 二、技术背景 **Java...

    struts2+spring+hibernate+生成报表

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责,共同构建了一个强大的企业级应用体系。Struts2作为MVC(Model-View-Controller)框架,负责处理请求和展现视图;Spring则是一个...

    jsp源码移动ssh项目(struts+spring+hibernate+oracle)

    Oracle是一种广泛使用的高性能关系型数据库管理系统,支持复杂的数据管理和处理需求。 - **数据表**:存储数据的基本单位,包含多个字段(列)。 - **索引**:提高数据检索速度的数据库结构。 - **触发器**:当特定...

    论坛系统(Struts 2+Hibernate+Spring实现)

    Struts 2具有丰富的拦截器、结果类型和插件体系,使得开发者能够轻松地处理表单验证、国际化、异常处理等复杂任务。 Hibernate则是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表之间的...

    Hibernate开发各类项目的技术总结

    同时,了解并掌握Hibernate的异常体系,有助于快速定位和解决问题。 总的来说,熟练掌握Hibernate技术,不仅需要理解其基本概念,还要在实践中不断探索和优化,才能更好地应对各种项目需求。通过不断地学习和实践,...

    spring培训学习笔记

    - **持久化支持**:Spring支持多种持久化技术,如JDBC、Hibernate、iBatis等,并提供了统一的异常处理机制。 #### 六、资源管理 - **数据库访问**:Spring支持JDBC访问数据库,并提供了高级特性如批处理更新、参数...

    java毕业设计-JAVA公共资源模块的设计与开发(源代码+论文).zip

    5. **异常处理**:理解Java异常体系,学习如何定义自定义异常,并使用try-catch-finally语句块进行异常捕获和处理。 6. **数据访问**:使用JDBC或ORM框架(如Hibernate、MyBatis)进行数据库操作,设计通用的DAO层...

    java毕业设计2

    理解Java的异常体系,学会何时抛出异常,如何捕获和处理异常,是非常重要的。 10. **文档编写**:良好的文档是项目成功的关键。你需要学习编写README、设计文档和用户手册,使用Markdown或LaTeX等工具。 11. **...

    java程序设计技巧

    3. **异常处理**:熟练使用try-catch-finally结构,合理捕获和处理异常,避免程序因未预期的错误而中断。 4. **集合框架**:深入理解ArrayList、LinkedList、HashSet、HashMap等集合类的特性和使用场景,了解它们...

    J2EE框架学习笔记

    这包括了解如何配置和使用框架,以及如何处理它们之间的协作问题,如异常处理、事务管理等。此外,对于现代开发环境,还需要关注框架的最新发展,如Spring Boot的自动配置和微服务支持,以及JDBC的替代方案如JPA...

    springMVC框架

    作为Spring框架的一部分,Spring MVC允许开发者通过Model-View-Controller(MVC)架构模式来分离应用程序的业务逻辑、数据处理和用户界面。在本文中,我们将深入探讨Spring MVC的关键特性、工作原理以及如何与...

    基于Java的订单管理系统的设计与实现任务书和指导书

    - **框架应用**:如Spring MVC、Hibernate等,可以帮助简化开发流程,提高开发效率。 **进度安排**: 1-2周:完成开题报告和英文翻译。 3-6周:查阅相关文献,进行需求分析和数据库设计。 7-14周:编码实现各个功能...

    Java语言程序设计-进阶篇

    1. **异常体系结构**:了解Java中的异常体系结构,包括`Throwable`类及其子类`Error`和`Exception`。 2. **自定义异常**:学习如何定义自己的异常类,以便更好地表达应用程序特定的错误情况。 3. **异常处理策略**:...

    accp 5.0 Y2项目实战 在线通讯录

    4. **框架应用**:可能采用Spring、Hibernate等框架简化开发过程,Spring负责控制反转和依赖注入,Hibernate则作为对象关系映射工具,简化数据库操作。 5. **安全机制**:学习密码加密存储,防止数据泄露。使用...

    基于java的综合测评系统毕业设计与实现(源代码+项目报告+开题报告+任务书).zip

    《基于Java的综合测评系统设计与实现》 Java技术在当今软件开发领域中扮演着重要角色,尤其在企业级应用...通过对Java核心技术的掌握和合理的设计模式运用,可以构建高效、稳定的测评系统,满足不同场景下的评估需求。

    2018年最新版Java程序员面试宝典

    - Spring框架:理解依赖注入和AOP原理,掌握Spring Boot的使用。 - MyBatis:学习SQL映射和动态SQL,以及MyBatis的事务管理。 - Hibernate:了解ORM框架,掌握对象关系映射的基本概念。 11. **数据库相关** - ...

    Struts-2.3.16.1完整包

    3. **异常处理**:Struts2允许自定义异常处理机制,通过全局异常拦截器或特定动作的异常处理,可以优雅地处理错误和异常。 4. **性能优化**:通过合理使用缓存、减少不必要的数据库查询、选择合适的结果类型等方法...

    酒店管理系统

    【酒店管理系统】是一种基于信息技术,用于管理酒店日常运营和服务的软件系统。...同时,这个项目也可以作为进一步学习其他技术,如Spring、Hibernate等的起点,帮助学生逐步构建全面的IT技能体系。

    springMVC基本理论

    - 视图层只关心如何展示数据,而不关心数据的来源和处理过程。 - 实例:用户登录成功后,页面显示欢迎信息,这些界面展示的工作就是由视图层完成的。 3. **Controller(控制器)** - 控制器作为模型和视图之间...

    java培训课程体系

    - **异常的概念:** 了解什么是异常,以及异常处理的重要性。 - **异常处理机制:** 掌握try-catch-finally语句块的使用。 - **自定义异常:** 学习如何定义自己的异常类。 ##### 1.11 泛型 - **泛型的基本原理:**...

Global site tag (gtag.js) - Google Analytics