声明式事务处理基本过程
通过ioc容器 和TransactionProxyFactoryBean对事务管理进行配置
-
读取和处理IoC容器配置的事务处理属性,并转化为Spring事务处理需要的内部数据结构。
-
spring事务处理模块实现统一的事务处理过程。
-
底层事务具体实现。
- 事务处理拦截器的配置
问题1:spring的TransactionInterceptor配置实在什么地方启动的,从而成为Advisor通知器中的一部分呢?
在IoC完成依赖注入的时通过initializeBean方法被调用
事务处理配置的读入
问题1:如何判断是否需要进行事务处理
TransactionAttributeSourcePointcut matches 方法
问题2:matches 匹配过程会用到 TransactionAttributeSource,这个属性在什么地方注入的
TransactionInterceptor 的基类 TransactionAspectSupport 通过 setTransactionAttributes 注入
NameMatchTransactionAttributeSource 作为 TransactionAttributeSource 具体实现
问题3:NameMatchTransactionAttributeSource 是怎样实现事务处理属性读入和匹配的
读入,遍历transactionAttributes 获得 事务方法名及事务属性 放到 map中(nameMap)
匹配,应用调用目标方法的时候,需要判断这个方法是否是事务方法,通过方法名在nameMap获得事务处理属性值,如果没有找到则通过PatternMatchUtils 进行命名模式上的匹配,如果匹配上会触发事务拦截器的拦截
- 事物处理拦截器的实现
- 事物处理的实现
- 具体事物处理器的实现
DataSourceTransactionManager
HibernateTransactionManager