在使用 Spring 框架的时候,可以有两种事务的实现方式,一种是编程式事务,由用户自己通过代码来控制事务的处理逻辑,还有一种是声明式事务,通过 @Transactional 注解来实现。
其实事务的操作本来应该是由数据库来进行控制,但是为了方便用户进行业务逻辑的操作,Spring 对事务功能进行了扩展实现,一般我们很好会用编程式事务,更多的是通过添加 @Transactional 注解来进行实现1,当添加此注解之后事务的自动功能就会关闭,由 Spring 框架来帮助进行控制。
其实事务操作是 AOP 的一个核心体现,当一个方案添加 @Tranactional 注解之后,spring 会基于这个类生成一个代理对象,会将这个代理对象作为 bean ,当使用这个代理对象的方法的时候,如果有事务处理,那么会先把事务的自动提交给关闭,然后去执行具体的业务逻辑,如果执行逻辑没有出现异常,那么代理逻辑就会直接提交,如果出现任何异常情况,那么直接进行回滚操作,当前用户可以控制对哪些异常进行回滚操作。
TransactionInterceptor