异常处理设计
前段时间设计了一个异常处理,效果还可以,但还不是很满意, 不知道别人的异常处理是个什么样子,贴出来跟大家讨论一下。先看类图:
?
?
1 在开发应用时会对模块信息先进行记录,包括:模块名、模块编码、模块描述、默认异常级别、Action类、Service类、DAO类和其它调用的类等等。
2 会对异常级别的处理方式以及要处理的包进行配置,这些信息由ApplicationConfig来解析并缓存。
?
3 模块信息会在第一次触发异常的时候进行缓存,并建立模块编码到模块信息、Action类到模块编码、Service类到模块编码、DAO类到模块编码的HashMap映射,这样异常触发类就可以根据className迅速查找的模块信息。
异常处理过程
1 出现异常->JaspExceptionHandler对异常堆进行分析找出异常触发类、关心的出错类并查找模块信息
2 调用LogWrapperService对异常信息进行包装,这个处理过程中也将ExceptionCode中列出的常见异常代码进行翻译,同时记录了用户的相关信息,如操作时间、用户名、客户端地址等等,最后LogWrapper中包装的信息包括提供给用户和提供给开发人员(包括异常触发类、程序执行过程出现的类、方法和行号,当然只列出配置包中的类,因为大部分异常信息涉及的类对我们来说没多大意义)两部分信息。
3 根据配置的异常处理级别调用相应的接口进行记录或提示,如写入日志文件、数据库、发邮件或短消息,最后弹出窗口提示错误信息(上面是显示给用户,下面显示给开发人员,默认隐藏)。
以上完全由程序自动捕获并处理,开发人员也可以干预处理过程,如设置异常级别和用户提示信息等。
1 楼 zzq230 2008-09-20 log4j配合spring会很出色,很欣赏LZ的的设计 2 楼 bulargy 2008-10-17 不错,最近正在设计异常处理,很有参考价值~~ 3 楼 zhoujj303030 2008-10-17 学习,确实写得挺有思想的! 4 楼 xiaoyu 2008-10-17 没有扩展性, 应该可以扩展exception的处理。 我一般是类似J2EE的Web Filter的处理方式:
ExceptionHandler --> ExceptionProcessChain --> ExceptionProcessor
ExceptionProcessor实现类的为代码:
doProcess(Throwable e, ExceptionProcessChain chain) {
//do xxxxxx.
chain.doProcess(e); //调用下一个处理方法
}
ExceptionProcessor的实现类可以有日志, 通知, 不同的等级, 不同的类型异常等
ExceptionHandler 的实现类可以有aop, filter, 普通的代理等形式。 一个Handler会有一个Chain链(组合是可以随便配置的) 5 楼 zeelong2 2008-10-28 LZ的设计还是不错的,呵。 6 楼 andy54321 2008-10-28 设计很好;
前段时间自己也想过,比对之下,
想的太简单了,。。。。。