基于Spring项目的异常设计
1、只使用包装过的RuntimeException,不使用CheckedException。原因:Spring框架本身放弃了CheckedException这个比较有争议的异常类,而且Spring的事务管理需要捕捉RuntimeException的子类才能实现事务回滚;
2、本着简洁高效的设计原则,尽量少实现自己包装的RuntimeException子类,将异常分为几个大类包装即可,多使用最基本的继承了RuntimeException的BaseException;
3、异常只用来处理异常流程,不得用于处理正常流程。如何区分正常和异常呢?比如验证用户密码不通过、金额超过最大限度、用户名不够长等可预料的错误情况,都属于业务流程中的正常流程,而那些出乎我们预料的、不在业务流程考虑范围内但确实可以对程序的正常运行造成影响的事件,统称为异常情况(例如网络中断、硬盘空间不足),需要使用try catch做异常处理,避免造成更大的损失。这种处理由于不知道错误原因,大多数情况下可以使用简单的记录日志或强制程序终止执行的办法进行处理;
4、不允许使用一种异常类处理一种业务错误的方法处理业务逻辑。原因:系统内会产生大量的异常错误类,不便于程序员之间的配合,可能导致重复的异常错误类定义;大量的try catch语句产生的代码量并不少于if else判断,而且造成了严重的性能损失,必须坚决摒弃;
5、在抛出异常使事务回滚的过程中,异常本身同时带有错误提示信息,例如throw new BaseException("账户余额不足!"),在Action层将异常截获,并将异常内错误提示信息放入request内返回页面,由统一的页面处理程序将信息取出,并使用javascript等方式弹出显示给用户;
6、使用javascript做错误验证是不可靠的作法,用户可以使用firebug跳过javascript验证。关键性验证必须使用java代码在服务器端做验证,为了验证的快速,提升用户体验,也可以同时在页面用javascript做验证。
关于使用异常的性能问题,有很多讨论,我们可以通过测试代码检测一下使用抛异常的方式处理业务逻辑到底会有多大的性能损失。以下代码摘抄自《透过JVM看 Exception本质》
http://www.iteye.com/topic/857722,这篇文章分析的很专业,建议看一下。
package org.fenixsoft.exception;
public class ExceptionTest {
private int testTimes;
public ExceptionTest(int testTimes) {
this.testTimes = testTimes;
}
public void newObject() {
long l = System.nanoTime();
for (int i = 0; i < testTimes; i++) {
new Object();
}
System.out.println("建立对象:" + (System.nanoTime() - l));
}
public void newException() {
long l = System.nanoTime();
for (int i = 0; i < testTimes; i++) {
new Exception();
}
System.out.println("建立异常对象:" + (System.nanoTime() - l));
}
public void catchException() {
long l = System.nanoTime();
for (int i = 0; i < testTimes; i++) {
try {
throw new Exception();
} catch (Exception e) {
}
}
System.out.println("建立、抛出并接住异常对象:" + (System.nanoTime() - l));
}
public static void main(String[] args) {
ExceptionTest test = new ExceptionTest(10000);
test.newObject();
test.newException();
test.catchException();
}
}
运行结果:
引用
建立对象:575817
建立异常对象:9589080
建立、抛出并接住异常对象:4739447
所以我们说使用抛异常的方式处理业务逻辑会造成大量性能损失,这个性能损失的数量级一般要超过正常处理的10倍。
分享到:
相关推荐
本项目是一个基于Spring Boot框架和MySQL数据库实现的创业孵化器平台系统,主要面向高校学生和初创企业,提供项目孵化、资源对接、咨询服务等一站式服务。这是一个完整的毕业设计或课程设计项目,包含了程序源代码、...
在IT行业中,Spring框架是...综上所述,基于Spring-plus、Spring、SpringMVC的Maven项目整合,不仅涵盖了Java Web开发的多个重要组件,还涉及到数据库设计、安全控制、测试等多个方面,是一个典型的后端开发实战项目。
该项目是一款基于Spring Boot的Java企业级应用源码,集成了402个文件,包括240个Java源文件、104个Markdown文档、19个XML配置文件、15个属性文件、5个HTML文件、3个Lua脚本文件和3个CSS文件。它涵盖了自定义Spring ...
本资源包含了一系列Spring Framework的核心jar包,以及与Spring项目相关的其他重要库,如Junit、Log4j和Commons-Logging。 1. Spring Framework核心组件: - `spring-core-5.0.1.RELEASE.jar`:这是Spring框架的...
1、基于spring boot + element-ui的后台管理系统源码+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考...
Spring Boot是Java开发领域中的一款热门框架,它简化了基于Spring的应用程序的初始设置和配置。这个压缩包包含了丰富的Spring Boot学习资料以及实际项目案例,是深入理解和掌握Spring Boot技术的宝贵资源。 首先,...
《基于Spring Boot的网络相册设计与实现》 在当今数字化时代,网络相册作为存储、分享个人照片的重要工具,已经成为了人们生活中不可或缺的一部分。本文将深入探讨如何利用Spring Boot框架构建一个高效、稳定的网络...
本项目是一个基于Spring Boot框架和MySQL数据库实现的同城生活助手小程序应用,主要涵盖了Java后端开发和数据库设计的相关知识。Spring Boot以其简化Spring应用程序开发的特性,成为了现代Java开发的主流选择,而...
本项目是一个基于Spring Boot框架和MySQL数据库的旅游公司网站系统,是针对学生进行优质毕业设计或课程设计的理想案例。这个项目不仅提供了完整的程序源代码,还包括了配套的数据库设计以及详细的配置环境说明,确保...
本项目是一个基于Spring Boot框架和MySQL数据库实现的在线考试报名系统,旨在提供一个方便、高效的学生报名参加各类考试的平台。这个系统具有完整的源代码、数据库设计和配置环境说明,适合作为毕业设计或课程设计的...
毕业设计基于Spring Boot的汽车4S店信息管理系统项目源 功能 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 岗位管理:...
本项目是一个基于Spring Boot框架和MySQL数据库的企业员工信息管理系统,适用于毕业设计或课程设计实践。这个系统涵盖了完整的程序源代码、数据库设计以及详细的环境配置说明,确保能够顺利运行。通过学习和实践该...
本项目是一个基于Spring Boot框架的秒杀系统设计,旨在提供一个高效、可靠的秒杀活动解决方案。系统涵盖了用户登录、注册、商品展示、订单处理等核心功能,并通过Redis进行缓存优化,提升系统性能。 ## 项目的主要...
本项目示例基于spring boot 最新版本(2.1.9)实现,Spring Boot、Spring Cloud 学习示例,将持续更新…… 在基于Spring Boot、Spring Cloud 分布微服务开发过程中,根据实际项目环境,需要选择、集成符合项目...
本项目是一个基于Spring Boot框架和MySQL数据库实现的医药处方管理系统,是针对计算机专业学生的优质毕业设计或课程设计项目。这个系统旨在提供一个高效、安全且易于管理的平台,用于存储和处理医药处方信息。下面将...
本项目是一个基于Spring Boot框架和MySQL数据库实现的鲜花售卖系统,旨在为学生提供一个优质的毕业设计或课程设计案例。这个系统全面涵盖了Web开发中的多个重要技术,包括后端开发、数据库设计、前后端交互等,适合...
内容概要:本文档介绍了基于Spring Boot构建的在线图书管理系统的课程设计,全面覆盖Java Web开发的核心概念与技术栈。主要内容包括项目背景、目标设定、技术选型、系统设计与数据库设计、后端开发细节、安全性配置...
本项目是一个基于Spring Boot框架和MySQL数据库实现的社区疫情数据管理系统,主要用于收集、存储、管理和展示社区内的疫情相关信息。作为一款优质的毕业设计或课程设计项目,它提供了完整的源代码、数据库设计以及...
本项目是基于Spring Boot框架和MySQL数据库实现的汽车维修客户服务系统,旨在提供一套完整的解决方案,以帮助汽车维修服务提供商管理客户、预约、维修记录等业务流程。该项目适合作为计算机科学与技术专业的毕业设计...
《基于Spring Boot的快递物流管理系统设计源码解析》 在当今信息化时代,快递物流管理系统扮演着至关重要的角色,它能够高效地处理大量的物流信息,提高工作效率,降低运营成本。本项目以Spring Boot为核心技术,...