根据分层的思想,自定义的Exception处在不同层中,这同时也产生了Exception的整个继承体系结构。
在Spring中的Exception可以说是相当多的,不过这属于框架内部的异常处理机制。
在我们应用程序范畴的自定义异常出于使用上的方便,你可以在各层中包装一个统一的异常往外抛,在接近UI层的时候,由UI层统一进行捕捉,从这一点上来看,抛出的(包装的)异常的信息对用户来说应该是友好的。
如果你想给用户足够细的信息提示的话,那么,不管在那一层,你就不是用一个Exception来捕捉所有可能产生的异常,你可能要分别捕捉,同时,包装并抛出新的自定义异常,给用户提示。
在产生的异常的地方,你可以对这些异常的信息做Log处理,同时用邮件的形式发给support的人员进行分析处理,如果能以报表的形式分发那是最好不过的了。
java 代码
- public class UserinfoDB {
-
- public List getUserinfoFromDB() throws XmddlException {
- try {
- int i = 10 / 0;
- System.out.println(i);
- } catch (Exception ex) {
- ex.printStackTrace();
- throw new XmddlException("get from db error!");
- }
- return null;
- }
-
- }
java 代码
- package com.xmddl.excep.controller;
-
- import java.util.List;
-
- import com.xmddl.excep.db.UserinfoDB;
- import com.xmddl.excep.ui.XmddlException;
-
- public class UserinfoController {
-
- public List getUserinfo() throws XmddlException {
- String name=null;
- try{
- System.out.print(name.toLowerCase());
- }catch(Exception ex)
- {
- ex.printStackTrace();
- throw new XmddlException("name is null!");
- }
- UserinfoDB udb = new UserinfoDB();
- return udb.getUserinfoFromDB();
- }
-
- }
java 代码
- package com.xmddl.excep.ui;
-
- import com.xmddl.excep.controller.UserinfoController;
-
- public class UIBean {
-
-
-
-
- public static void main(String[] args) {
- try {
- int i = 100 / 0;
- System.out.println(i);
- } catch (Exception ex) {
- System.out.println("by zero");
- }
-
- UserinfoController uc = new UserinfoController();
- try {
- uc.getUserinfo();
- } catch (XmddlException e) {
- System.out.println(e.getMessage());
- }
- }
-
- }