自定义事务
Spring的开启事务管理主要是通过@EnableTransactionManagement注解来实现的。
查看源码就会发现,这个注解主要是注入了两个类InfrastructureAdvisorAutoProxyCreator和BeanFactoryTransactionAttributeSourceAdvisor,而且这两个类是通过其他的Configure类导入的。
- InfrastructureAdvisorAutoProxyCreator继承自AbstractAutoProxyCreator,自定义Aop里介绍过这个类,主要是读取Advisor类,并对符合的bean进行二次代理。
- BeanFactoryTransactionAttributeSourceAdvisor就是被扫描的Advisor类。这个类会扫面被Transactional注释的类的方法,并提供TransactionInterceptor,来代理被注释的方法。
<bean class="org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor">
<property name="advice" ref="wmsTransactionInterceptor" />
<property name="transactionAttributeSource" ref="transactionAttributeSource" />
</bean>

invoke方法,在事务方法开始的前后输出了部分信息
<bean id="wmsTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="scmTransactionManager" />
<property name="transactionAttributeSource" ref="transactionAttributeSource" />
</bean>

封装 @Transactional注解中声明的各个属性
<bean id="transactionAttributeSource" class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource">
<constructor-arg index="0" ref="wmsTransactionalAnnotationParser"/>
</bean>

扫描注解的方法
<bean id="wmsTransactionalAnnotationParser" class="com.WmsTransactionalAnnotationParser" />
浙公网安备 33010602011771号