设计的思考
设计的模式林林总总,各种教条到处被津津乐道。其中的精髓一眼望去,要么显而易见,要不藏山露水,百思不得其解。
近日的一个任务是完成一个Spring下的异常设计。
要求很简单:设计异常管理框架。
历程:
1,普遍的处理
1.1 异常捕获。利用Jsp2.0规范中的error-page配置,写一个Servlet,该Servlet中,通过
Throwable exception = (Throwable)httpServletRequest.getAttribute(“javax.servlet.error.exception”);
提取异常对象,然后根据类型分析异常信息(见2)
1.2 异常信息
提取异常的堆栈信息,判断异常类的类型,并国际化.
1.3 异常日志
在异常构造函数中写日志,不显式调用
1.4 通用异常
目的是将checkedException转成uncheckedException,同时构造函数不写两次
2, 基于Spring的异常处理
2.1 由Spring的Servlet配置转发
Spring的MVC学习
2.2 异常信息
2.3 日志
日志分为“异常日志”和“操作日志”。由Log4j配置3个记录器,操作日志记载到JDBC
一个日志工厂,获取单例的异常日志和单例的操作日志
2.4 通用异常
基本同1.4。做了国际化处理,三个构造函数,支持多种异常策略。
2.5 通用异常处理
和通用异常配合,做国际化输出
2.6 国际化
国际化在java代码中获取国际化字符,做为参数传输。中文要转码
国际化时指向国际化的bean配置文件
3. 简约的异常处理
3.1 由Spring的contextloader直接读取国际化文件
3.2 通用异常类的简约
只做异常该做的事情,不去分析异常的类型。
做:记录异常,传递国际化的Key
3.3 各个类与页面都将功能明确
通用异常类:只负责多层抛和日志
通用异常类的处理页面:国际化
默认异常的处理页面:根据异常得名子获取国际化信息
3.4 国际化信息
异常的类型不做判断,而是将异常得名子做为国际化的Key
总结发展:
从一锅粥变成了2个烤串(为何叫做烤串,我也不知道)
从最开始的想无所不能,变成各自独立,功能清晰。
从到处插手中跳出