Spring进阶(二)

利用AOP进行异常处理

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

异常处理器

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

  • 具体实现

    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
    27
    28
    29
    30
    31
    32
    33
     package com.itheima.controller;
    import com.itheima.exception.BusinessException;
    import com.itheima.exception.SystemException;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;

    //@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设置统一数据返回格式)