@Transactional(rollbackFor = Exc
昨天有一场面试,一个人问我@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异常处理机制。希望这个回答能够解决您的疑问。如果您有任何其他问题,请随时告诉我。