dao : 处理数据库交互,增删改查.
service: 负责业务模块的逻辑应用设计, 配置事务。
controller: 负责请求转发,接受页面过来的参数,传给service处理,接到返回值,再传给页面。
异常处理
1、dao层不捕获异常、不抛出异常:spring框架将底层的数据库checked异常封装成unchecked异常了
2、service层捕获异常,并抛出自定义unchecked异常,抛出的异常定义状态码:checked异常默认情况事务不会回滚 . (如果不抛出异常事务不会回滚)
3、controller层捕获unchecked异常, 处理返回结果.
4、exceptionHandler中统一处理所有没有捕获异常
异常分类
https://blog.csdn.net/qq_14982047/article/details/50989761
spring aop 异常捕获原理
默认情况下aop只捕获RuntimeException的异常,但可以通过配置来捕获特定的异常并回滚,
换句话说在service的方法中 不使用try catch 或者 在catch中最后加上throw new RuntimeException(), 这样程序异常时才能被aop捕获进而回滚
解决方案:
- 方案1: service中不做异常捕获, 程序500.
- 方案2: service中做异常捕获 , 在catch中最后加上throw new RuntimeException()
- 方案3: service中做异常捕获, 在catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样controller就无需去处理异常.