05 spring事务的底层原理

vvEcho 2024-01-24 17:21:52
Categories: Tags:

事务的操作本来应该由数据库进行控制,但是为了方便用户进行业务逻辑的控制,spring对事务功能进行了扩展实现。一般我们很少使用编程式事务,更多的是使用@Transactional注解实现。

当使用了@Transactional注解后事务的自动功能就会关闭,由spring帮助实现事务的控制。
spring的事务管理是通过AOP代理实现,对被代理对象的每个方法进行拦截,在方法执行前启动事务,在方法执行完成后根据是否有异常及异常的类型进行提交或回滚。

当某个类或方法上使用@Transactional注解后,spring会基于该类生成一个代理对象,并将这个代理对象作为bean。

当调用这个代理对象的方法时,如果有事务处理,则会关闭事务的自动功能,然后执行方法的具体业务逻辑.

如果业务逻辑没有异常,那么代理逻辑就会直接提交

如果出现任何异常,那么直接进行回滚。我们也可以控制对哪些异常进行回滚操作。

如何控制对哪些异常进行回滚?

我们可以编写事务拦截器,对特定路径下的包进行事务切入,然后设置事务回滚规则参数中设置回滚参数属性即异常类型,即会对特定异常实现拦截;

事务拦截器代码示例见:/Users/echo/Documents/sCloud/LocalDemo/src/main/java/com/local/demo/config/TransactionManagerConfig