Spring学习之旅-组件支撑篇(3)

79 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情


写在前面

作为一个java程序员,spring应该都不会陌生了吧?

对于大部分程序员来说,spring的入门,估计跑起一个框架,熟悉一下开发的流程,基本上就掌握spring框架的开发了。

随着开发年限的变大,我们不能仅仅是掌握到这个地步,更应该深入的学习spring框架。

这不,接下来就是spring框架的学习之旅了,希望可以帮助到大家。

一、事务支持

1.1 Spring框架事务管理相关接口

Spring并不直接管理事务,而是提供了事务管理接口是PlatfomTransactionManager,
通过这个接口,spring为各个平台如JDBC、Hibernate 等都提供了对应的事务管理器,但是具体的实现就是各个平台自己的事情了。

image.png

  1. PlatformTransactionManager接口 -- 平台事务管理器. (真正管理事务的类)。该接口有具体的实现类,根据不同的持久层框架,需要选择不同的实现类!
  2. TransactionDefinition接口 -- 事务定义信息. (事务的隔离级别,传播行为,超时,只读)
  3. TransactionStatus接口 -- 事务的状态(是否新事务、是否已提交.是否有保存点是否回滚)
  4. 总结: 上述对象之间的关系: 平台事务管理器真正管理事务对象. 根据事务定义的信息 TransactionDefinition进行事务管理, 在管理事务中产生一些状态. 将状态记录到TransactionStatus中
  5. PlatformTransactionManager 接口中实现类和常用的方法
1.接口的实现类
    * 如果使用的Spring的JDBC模板或者 MyBatis (IBatis)框架,需要选择DatasourceTransactionManager实现类
    * 如果使用的是Hibernate的框架,需要选择HibernateTransactionmanager实现类
    
2.该接口的常用方法
    * void commit(TransactionStatus status)
    * TransactionStatus getTransaction(TransactionDefinition definition)
    * void rollback(Transactionstatus status)
  1. TransactionDefinition
1.事务隔离级别的常量
    * static int ISOLATION DEFAULT   --采用数据库的默认隔高级别
    * static int ISOLATION READ_ UNCOWMITTED
    * static int ISOLATION READ_ COWNITTED
    * static int ISOLATION REPEATABLE_ READ
    * static int ISOLATION SERIALIZABLE
    
2.事务的传播行为常量(不用设置,使用默认值)
    * 先解释什么是事务的传播行为: 解决的是业务层之间的方法调用! !
    * PROPAGATION_ REQUIRED(默认值) -- A中有事务,使用中的事务。如果没有,B就会开启一个新的事务,将A包含进来。(保证A,在同-个事务中), 默认值! !
    * PROPAGATIONL SUPPORTS        -- A中有事务,使用A中的事务。如果A中没有事务。那么B也不使用事务。
    * PROPAGATION MANDATORY        -- A中有事务,使用A中的事务。如果A没有事务. 抛出异常.
    * PROPAGATION REQUIRES NEW     -- A中有事务, 将A中的事务挂起。B创建一个新的事务. (保证A, B没有在一个事务中)
    * PROPAGATION NOT_ SUPPORTED   -- A中有事务, 将A中的事务挂起。
    * PROPAGATION NEVER            -- A中有事务,抛出异常.
    * PROPAGATION_ NESTED          -- 嵌套事务. 当A执行之后,就会在这个位置设置一个保存点.如果B没有可题。执行通过如果础现异常,运行客户根据需求回滚C选择回滚到保存点或者是最初始状态)

好了,以上就是Spring学习之旅-组件支撑篇(3) 的全部内容了。

今天就先到这里了,后面的内容,留下次分享了,先溜了!!!^_^

如果觉得写得不错的,帮忙点赞、评论、收藏一下呗!!!

image.png