Spring进阶(二)

利用AOP进行异常处理

  1. 出现异常的原因

    • 框架内部抛出的异常:因使用不合规导致
    • 数据层抛出的异常:因外部服务器故障导致(例如:服务器访问超时)
    • 业务层抛出的异常:因业务逻辑书写错误导致(例如:遍历业务书写操作,导致索引异常等
    • 表现层抛出的异常:因数据收集、校验等规则导致(例如:不匹配的数据类型间导致异常)
    • 工具类抛出的异常:因工具类书写不严谨不够健壮导致(例如:必要释放的连接长期未释放等)
  2. 将所有异常都抛到表现层

异常处理器

  • 集中统一的处理项目中的异常

  • 具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//@RestControllerAdvice用于标识当前类为REST风格对应的异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {
//@ExceptionHandler用于设置当前处理器类对应的异常类型
@ExceptionHandler(SystemException.class)
public Result doSystemException(SystemException ex){
//记录日志
//发送消息给运维
//发送邮件给开发人员,ex对象发送给开发人员
return new Result(ex.getCode(),null,ex.getMessage());
}

@ExceptionHandler(BusinessException.class)
public Result doBusinessException(BusinessException ex){
return new Result(ex.getCode(),null,ex.getMessage());
}

//除了自定义的异常处理器,保留对Exception类型的异常处理,用于处理非预期的异常
@ExceptionHandler(Exception.class)
public Result doOtherException(Exception ex){
//记录日志
//发送消息给运维
//发送邮件给开发人员,ex对象发送给开发人员
return new Result(Code.SYSTEM_UNKNOW_ERR,null,"系统繁忙,请稍后再试!");
}
}
  • 自定义异常,自己对项目异常分类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package com.itheima.exception;
    //自定义异常处理器,用于封装异常信息,对异常进行分类
    public class SystemException extends RuntimeException{
    private Integer code;

    public Integer getCode() {
    return code;
    }

    public void setCode(Integer code) {
    this.code = code;
    }

    public SystemException(Integer code, String message) {
    super(message);
    this.code = code;
    }

    public SystemException(Integer code, String message, Throwable cause) {
    super(message, cause);
    this.code = code;
    }

    }

Spring整合SSM

整合流程

  1. 创建工程

  2. SSM整合

  • Spring

    SpringConfig

  • Mybatis

    MybatisConfig

    JdbcConfig

    jdbc.properties

  • SpringMVC

    ServletConfig

    SpringMvcConfig

  1. 功能模块
  • 表与实体类

  • dao(接口+实现类)

  • service(接口+实现类)

    业务层接口测试(整合Junit)

  • controller

    表现层接口测试(PostMan)

    表现层数据封装(Result设置统一数据返回格式)