小结:
从声明式事务的整个实现中我们看到,声明式事务处理完全可以看成是一个具体的Spring AOP应用。Spring事务处理的实现本身就为应用开发者提供一个非常优秀的AOP应用参考实例。在Spring的声明式事务处理中,采用了IOC容器的Bean配置为事务方法调用提供事务属性设置,从而为应用对事务处理的使用提供方便从Spring实现的角度来看,声明式事务处理的大致实现过程这样:为事务处理配置好AOP的基础设施,比如对应的Proxy代理对象和事务处理Interceptor拦截器对象之后,首先需要完成对这些事务处理属性的读取,这些属性的读取处理是在TransactionInterceptor中实现的;在完成这些事务处理属性的读取之后,Spring为事务处理的具体实现做好准备。可以看到,Spring声明式事务处理过程同时也是对一个整合事务处理实现到Spring AOP和IOC容器中去的过程。
TransactionInterceptor使用AOP实现声明式事务处理的拦截器,封装了Spring对声明式事务处理实现的基本过程;
TransactionAttributeSource和TransactionAttribute这两个类,封装了对声明式事务处理属性的识别,以及信息的读入和配置。
TransactionAtrribute对象,可以事务对事务处理属性的数据抽象。
TransactionInfo和TransactionStatus存放事务处理信息的主要数据对象,她们通过与县城的绑定来实现事务的隔离性。具体来说,TransactionInfo对象本省就像一个栈,对应着每一次事务的调用,保存每一次事务的方法调用的事务处理信息。TransactionInfo对象中持有TransactionStatus对象,TransactionStatus掌管事务执行的详细信息,包括具体的事务对象,事务执行的状态,事务设置状态。在事务的创建、启动、提交和回滚的过程中,这些都需要和TransactionStatus对象中的数据打交道。在准备完数据之后,具体的事务处理是有事务处理器TransactionManager来完成的。事务处理器完成事务处理的过程中,与具体事务处理器无关的操作封装到AbstracPlatformTransactionManager中实现了。这个抽象的事务处理器为不同的具体事务处理器提供通用的事务处理模板。具体的事务处理器比如包含DataSourceTransactionManager和HibernateTransactionManager的实现中可以看到事务的创建,挂起,提交,回滚操作。