Spring事务是怎么实现的?

=1.原理:=
spring的核心是IOC和AOP(Aspect Oriented Programming)。其中ioc是将对象创建权交由spring容器(这个一带而过,接着说aop),AOP是【面向切面编程】,使用【动态代理】技术,实现在【不修改java源代码】的情况下,运行时实现方法功能的【增强】,而动态代理内部实现用的是反射。spring的事务是通过aop来实现的,从cglib.jar包就可以看出,是和动态代理相关的。

=2.spring事务的使用:=
声明式和编程式(用的比较少)
声明式事务: 建立在AOP之上的,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明即可。

=3.spring的事务四个基本特性(ACID原则)=

  • 原子性(Atomicity):
    一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做
   例如:A和B两个人一共1000元,A给B转账100元,A付款100元,B收款100元, A的付款行为和B的收款行为要么都成功,要么都失败
  • 一致性(Consistency):
    事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
  例如:A和B两个人一共1000元,无论A,B两人互相转账多少次,A和B两个人总额都应该是1000元
  • 隔离性(Isolation):
    事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性 和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
 例如:万达影院有《叶问4》电影票100张,允许所有人同时去淘票票上购票,当第100张电影票被A,B,C,3人同时购买,
 如果A拿到第100张电影票,但是还在犹豫要不要付钱,则B,C必须等待A的决定,
 如果A决定付钱,B.C就无法抢到票,
 如果A超时不付钱,则这第100张电影票回归票池,从新分配。
  • 持久性(Durability):
    一个事务一旦提交,它对数据库中数据的改变会永久存储起来。其他操作不会对它产生影响
例如:万达影院有《叶问4》电影票100张,100张电影票销售完毕,
对于每个购买者来说,他的购买记录已经产生,即使退票,他之前的购买记录也不会消失。

你可能感兴趣的:(#,Spring面试题,spring)