Spring的事务管理器最顶层接口PlatformTransactionManager
有一个抽象类AbstractPlatformTransactionManager实现PlatformTransactionManager接口。对接口中的commit、rollback实现。回调了子类的方法。但是没有实习getTransction方法。其它具体实现就交给相对应事务处理器中。如:DataSourceTransactionManager、HibernateTranscationManager、JdoTransactionManager
说明: 1、在AbstractFlatformTransactionManager中的commit方法中 1、如果有异常要回滚 processRollback() 具体的处理回滚的信息要交给具体的事务管理器 HibernateTransactionManager DataSourceTransactionManager JdoTransactionManager 2、如果没有异常,要提交 processCommit(); 具体处理提交的信息要交给具体的事务管理器 HibernateTransactionManager DataSourceTransactionManager JdoTransactionManager 2、在AbstractFlatformTransactionManager中的doGetTransaction方法是一个抽象方法, 具体的事务管理器实现该方法得到具体的事务对象 |
为什么spring要这样设计呢?
答:第一方面,通过接口可以实现ioc。第二方面。通过抽象类可以把共同的代码实现了。如:
spring在调用具体的事务管理器之前做了一些准备工作,提前设置事务的读写策略,而这些事务策略是公共的东西,是写在spring的配置文件中的,而这些内容的处理需要放在抽象类中去做