关于事务和动态代理

69 篇文章 1 订阅
55 篇文章 3 订阅

关于事务和动态代理

下边是一些动态代理的两种区别:

Spring声明式事务的具体实现方式是动态决定的,与具体配置、以及事务代理对象是否实现接口等有关。

2、使用JDK动态代理的情况
在满足下面两个条件时,Spring会选择JDK动态代理作为声明式事务的实现方式。

(1)事务代理类必须实现接口且不能显式继承父类(Object这个父类不算)。

(2)配置:springboot的启动类要加上@EnableTransactionManagement和@EnableAspectAutoProxy注解,且其中的proxyTargetClass属性要为默认的fasle,如果设置成了true就会开启cglib。

注意:

在这种情况下,@Transcation注解可以加在事务代理对象所实现的接口的方法上,也可以加在具体的实现类上。

3、使用cglib的情况
除了上述情况,Spring 会采用cglib方式来实现声明式事务。

(1)比如业务类未实现接口。

(2)proxyTargetClass=true时。

当然,在这种情况下,@Transcation注解只能加在具体的实现类上。

由于Spring事务的具体实现方式未知,因此推荐把注解加在实现类上,不然会带来很多的问题。

Spring的动态代理事务是两个关键的概念。让我先解释一下它们各自的含义,然后再谈论它们之间的关系。 动态代理是一种设计模式,它允许程序在运行时为一个接口创建一个代理对象。这意味着你可以在不改变原始类代码的情况下,通过代理对象来执行额外的操作。Spring框架使用了动态代理来实现AOP(面向切面编程)功能,通过在原始对象的方法执行前后插入切面逻辑,实现了横切关注点的解耦。 事务是指一组数据库操作,它们要么全部成功执行,要么全部回滚到初始状态,以保持数据的一致性。在Spring中,事务管理是通过AOP实现的。通过在方法或类上添加事务注解,Spring可以自动管理事务的开始、提交或回滚。这样,你可以轻松地将事务逻辑与业务逻辑分离开来,使代码更加清晰和可维护。 动态代理事务之间的关系在于,Spring使用动态代理来创建事务代理对象。当你在方法或类上添加事务注解时,Spring会在运行时动态地创建一个代理对象,并在方法执行前后添加事务管理的逻辑。这样,当方法被调用时,事务代理对象会负责处理事务的开始、提交或回滚,以保证数据的一致性。 总结一下,动态代理是Spring实现AOP的一种机制,而事务则是通过AOP和动态代理来实现的。它们共同为应用程序提供了更好的可扩展性、可维护性和可测试性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值