对于异常处理的架构,大家有没有什么好的建议 这个系统比较大,涉及的方方面面内容也比较多.这里的异常处理是个关键.我这方面接触的少,这里大家都是高手,请大家提提建议吧. 如何建立一个完善的异常处理机制.我相信是任何一个健壮的系统所必备的. 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 定义总异常类,往下有很多分支,命名很重要,起码如果抛出异常了你能知道什么地方出错的,或者直接在catch中输出出错信息算了,这样不容易遗漏可能出错的地方 可以通过继承runTimeException来建立自定义顶级异常类然后通过具体的业务,设置具体的异常代码然后转向自己的异常页面 你的需求应该是希望异常处理的方法是可配置的,对吧初步想法可以使用监听器有异常被抛出,也可以视为有消息产生可以参照awt,swing的消息处理机制interface ExceptionListener{ exceptionPerformed(Exception e) }class A{ ExceptionListener listner; setListener(ExceptionListener listner); try{ doSome(); }catch(Exception e){ listner.exceptionPerformed(e); }}然后就是编写一些以不同方法去实现ExceptionListener接口的监听类在你需要的情况下A.setListener()不同的监听实现类即可 配合spring这些控制反转的框架,就更方便了 上面的想法,我又考虑了一下,还有些缺陷,因为编写A类或使用了A类的程序员就要去考虑A类的异常用哪个监听类我的另外一个想法,在监听器的同时,参照log4jlog4j是可配置消息输出方式的框架那你设置一个总的exception处理类这个类中有一个被监听类名;有一种(或几种)异常处理方法还有一个异常处理对应表class ExceptionPerformer{ String targetName; ExceptionListener listener; public ExceptionPerformer(String targetName) { listener=parseListenersMapFromConfig(targetName); } parseListenersMapFromConfig(String targetName) { String listenerClassName=....; listener=Class.forName(listenerClassName).newInstens(); } exceptionPerformed(Exception e) { listener.exceptionPerformed(e); } }然后要处理异常的类就只需要performer.exceptionPerformed(e);class A{ static ExceptionPerformer performer=new ExceptionPerformer(this.getName()); try{ doSome(); }catch(Exception e){ performer.exceptionPerformed(e); }} 这样,我要使用A类,我就不需要去考虑给A类set一个什么listener了那剩下的就是配置文件的格式和处理配置文件的方法然后编写一大堆listener实现类配置文件类似于:targetName1=a1listener1=l1targetName2=a2listener2=l2targetName3=a3listener3=l3你也可以把ExceptionPerformer的exceptionPerformed方法分成几种,什么alarm()了,iDontCare()了,等等大体框架意思就是这样了,细节方面留给楼主考虑下吧 不过好像使用spring之后,使用A类的时候也不需要考虑set什么listener了,呵呵spring不是太熟 上面说的都可以,还有一种方式,就是自己在每个对应的类中定义对应的异常类,然后发现异常的时候抛出该异常。使用threw new 异常类(exception)。 其实我的那个应该也就是个单入口模式 单入口,就是统一使用一个入口那么入口统一了之后你所需要的问题就是怎么在这个入口里处理进来的这些异常在没有oo的时候不过是已串长长的switch case 罢了当然,如果你问的是如何处理得oo,他的回答是简单了些不过考虑下我的想法吧,期待你的实现; 最近也在考虑这个问题,系统越来越大,是应该有一个完善的异常处理机制这里,我也期待大家能给出非常具体的解决方案,同时提一下我自己的想法:在我看来,有些异常是用户的输入导致的,这些异常应该在最底层捕获时转换成用户定义的异常类,如UserErrorException然后一层层往外抛,直到返回给用户错误提示,另一些是程序不够健壮引起的缺陷,可预测的并且可处理的,在捕获后应该做一些补救措施,不可预测的应该在最外层捕获后记录日志,并返回给用户友好的提示,如“程序缺陷引起bug,请联系管理员”等。个人想法,不知对错,欢迎批判并进步。 java金额格式化 JTable的相关问题:自动插入数据 为什么 Thread.yield 要设计成静态的? 怎么都是同样的错误啊? 请教如何检测客户端的java虚拟机?有,无? 有的话版本,.... 小问题: poi取Excel单元格数据时,日期格式的问题? 求Java最短路径的算法(Dijsktra算法) JComboBox下拉框怎么显示图片选项? 菜鸟问题,关于super 那位大哥做过JAVA-VRML-EAI 的工作的,那里可以下到有关的包和资料阿! SWT中怎么让Combo显示的列表多些呢? 现在数据在很多的情况下,也只能显示4个 用java语言处理bmp文件的问题
有异常被抛出,也可以视为有消息产生
可以参照awt,swing的消息处理机制interface ExceptionListener
{
exceptionPerformed(Exception e)
}class A
{
ExceptionListener listner;
setListener(ExceptionListener listner);
try{
doSome();
}catch(Exception e){
listner.exceptionPerformed(e);
}
}然后就是编写一些以不同方法去实现ExceptionListener接口的监听类在你需要的情况下A.setListener()不同的监听实现类即可
因为编写A类或使用了A类的程序员就要去考虑A类的异常用哪个监听类我的另外一个想法,在监听器的同时,参照log4j
log4j是可配置消息输出方式的框架那你设置一个总的exception处理类这个类中
有一个被监听类名;
有一种(或几种)异常处理方法
还有一个异常处理对应表class ExceptionPerformer{
String targetName;
ExceptionListener listener;
public ExceptionPerformer(String targetName)
{
listener=parseListenersMapFromConfig(targetName);
}
parseListenersMapFromConfig(String targetName)
{
String listenerClassName=....;
listener=Class.forName(listenerClassName).newInstens();
}
exceptionPerformed(Exception e)
{
listener.exceptionPerformed(e);
}
}然后要处理异常的类就只需要performer.exceptionPerformed(e);
class A
{
static ExceptionPerformer performer=new ExceptionPerformer(this.getName());
try{
doSome();
}catch(Exception e){
performer.exceptionPerformed(e);
}
} 这样,我要使用A类,我就不需要去考虑给A类set一个什么listener了那剩下的就是配置文件的格式和处理配置文件的方法
然后编写一大堆listener实现类配置文件类似于:
targetName1=a1
listener1=l1targetName2=a2
listener2=l2targetName3=a3
listener3=l3你也可以把ExceptionPerformer的exceptionPerformed方法分成几种,
什么alarm()了,iDontCare()了,等等大体框架意思就是这样了,细节方面留给楼主考虑下吧
单入口,就是统一使用一个入口
那么入口统一了之后
你所需要的问题就是怎么在这个入口里处理进来的这些异常在没有oo的时候不过是已串长长的
switch case 罢了
当然,如果你问的是如何处理得oo,他的回答是简单了些
不过考虑下我的想法吧,期待你的实现;
然后一层层往外抛,直到返回给用户错误提示,
另一些是程序不够健壮引起的缺陷,可预测的并且可处理的,在捕获后应该做一些补救措施,不可预测的应该在最外层捕获后记录日志,
并返回给用户友好的提示,如“程序缺陷引起bug,请联系管理员”等。个人想法,不知对错,欢迎批判并进步。