自定义事务

Spring的开启事务管理主要是通过@EnableTransactionManagement注解来实现的。
查看源码就会发现,这个注解主要是注入了两个类InfrastructureAdvisorAutoProxyCreatorBeanFactoryTransactionAttributeSourceAdvisor,而且这两个类是通过其他的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" />

posted on 2018-10-30 17:07  xiaowater  阅读(141)  评论(0)    收藏  举报

导航