@Transactional(rollbackFor = Exc

2024-04-14  本文已影响0人  o_O小薯条

昨天有一场面试,一个人问我@Transactional(rollbackFor = Exception.class),如果遇到自定义异常,会回滚吗,我说会,因为父类都是Exception,面试官说那我不继承Exception呢,这面试水平可见一般,下面我就此问题进行详细解释一下:

在Spring框架中,通常在使用 @Transactional 注解时会指定 rollbackFor 属性来指定哪些异常会导致事务回滚。虽然 Throwable 是所有错误和异常的超类,但是通常不建议将 Throwable 作为 rollbackFor 属性的参数,因为 Throwable 包括了 Error 类,而 Error 类通常表示严重的问题,比如虚拟机错误,这些错误是程序无法恢复的,不应该通过事务回滚来处理。

相比之下, Exception 类是 Throwable 的子类,它代表了程序可以处理的异常情况,通常在事务处理中我们只希望针对特定的异常进行事务回滚,而不是所有的异常,因此通常会将 Exception 类作为 rollbackFor 属性的参数,以便更精确地控制事务回滚的行为。

总的来说,虽然 Throwable 是所有错误和异常的父类,但在实际应用中,为了更精确地控制事务回滚的行为,通常会使用 Exception 类而不是 Throwable 类来指定 rollbackFor 属性。希望这个解释能够帮助您理解这个问题。如果您有任何其他问题,请随时告诉我。

自定义异常类通常会继承自Exception类或其子类。在Java中,编写自定义异常类时,通常会继承自Exception类或其子类,以便利用Java异常处理机制的特性。通过继承Exception类,可以让自定义异常类成为已检查异常(checked exception),这样在编译时就会强制要求对这些异常进行处理,提高代码的健壮性和可靠性。

当然,根据实际情况,有时也可以继承RuntimeException类或其子类,使自定义异常类成为未检查异常(unchecked exception),这样在编译时不会强制要求对这些异常进行处理,但需要开发人员在代码中进行主动处理。

总的来说,自定义异常类通常会继承Exception类或其子类,以便更好地利用Java异常处理机制。希望这个回答能够解决您的疑问。如果您有任何其他问题,请随时告诉我。

上一篇下一篇

猜你喜欢

热点阅读