10.4.3 业务逻辑组件的异常处理

10.4.3 业务逻辑组件的异常处理

Spring的异常处理哲学简化了异常的处理:所有的数据库访问异常都被包装成了Runtime异常,在DAO组件中无须显式捕捉异常,所有的异常都被推迟到业务逻辑组件中捕捉。
在业务逻辑组件中捕捉系统抛出的原始异常,这种原始异常不应该被客户端看到,甚至不应该在服务器端暴露出来。为了达到这个目的,可以使用log4j 的日志功能:系统使用log4j记录业务逻辑方法中原始的异常信息,然后再抛出自定义异常。下面是本系统中自定义异常类的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package org.crazyit.auction.exception;

public class AuctionException extends Exception
{
private static final long serialVersionUID = 1L;
// 定义一个无参数的构造器
public AuctionException()
{
}
// 定义一个带message参数的构造参数
public AuctionException(String message)
{
super(message);
}
}

系统业务逻辑方法采用如下方式来处理逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
try
{
//完成业务逻辑
}
//捕捉异常
catch (Exception e)
{
//通过日志记录异常
log.debug(e.getMessage());
//抛出新异常
throw new AuctionException("底层业务异常,请重试");
}

业务层抛出的业务异常会传播到控制器层,而控制器则负责将该异常封装成JSON数据响应传给浏览器端的JS脚本。