SpringMVC 踩坑记

159 阅读1分钟

1. 关于@Transactional的事务回滚

  • 只能在修饰public的方法中生效。
  • 如果有@Transactional修饰的public方法a()调用private方法b(),实际的数据库操作在b()中,事务回滚会生效
  • 事务回滚默认只是RuntimeException或其子类
  • 如果自己try catch了RuntimeException,又不重新抛出的话,那样不会事务回滚
  • 被自身类中没有@Transactional的方法调用

2. 关于bean的自动注入失败获得null

  • 配置缺失,比如为开启注解扫描驱动、注入组件为注册
  • 使用 new 关键字创建的对象不受spring容器管理,无法注入
  • 注入静态变量, 静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入

3.@ExceptionHandler注解的方法出现500错误

错误代码

public Object handleError(ValidationException e) {
    logger.error(e.getMessage());
    res.setCode("405");
    res.setMsg(e.getMessage());
    res.setData(new Object();
    return res;
}

正确代码

public Object handleError(ValidationException e) {
    logger.error(e.getMessage());
    res.setCode("405");
    res.setMsg(e.getMessage());
    // 修改此句
    res.setData("";
    return res;
}

不能返回包含Object对象的类,完全就不知所以。。