实现目的
提供自定义异常以及异常工厂类
源码package
src/main/java/org/apache/ibatis/exceptions
自定义异常实现
实现比较简单,直接继承RuntimeException
异常工厂类
使用工厂模式,将普通异常包装成Mybatis自定义异常
public class ExceptionFactory {
private ExceptionFactory() {
// Prevent Instantiation
}
/**
* 把普通异常包装成mybatis自定义的PersistenceException
*
* @param message message
* @param e e
* @return 自定义异常
*/
public static RuntimeException wrapException(String message, Exception e) {
// 查找错误上下文,得到错误信息和根因,传给PersistenceException
// ErrorContext是线程间隔离的. 而.message(message).cause则是典型的构建器模式
return new PersistenceException(ErrorContext.instance().message(message).cause(e).toString(), e);
}
}
UT
类org.apache.ibatis.exceptions.GeneralExceptionsTest
从该类中可以看出,Mybatis为每种不同的异常场景,都定义一个PersistentceException
的子类。
而且这些自定义的异常类,并没有统一放在exception package中,而是分别放在各自功能模块的package中,这种处理方法可以借鉴一下。
毕竟笔者都是习惯统一放在一个package中