spring---transaction(6)---事務的配置

1 寫在前面

  上一篇咱們瞭解到spring的事務的體系。這裏咱們將結合上篇講spring事務的配置spring

 

 

2 Spring的三種事務配置形式

   2.1 使用TransactionProxyFactoryBean

複製代碼
<bean id="proxy"
   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <!-- 爲事務代理工廠Bean注入事務管理器 -->
    <property name="transactionManager" ref="transactionManager" />
    <!-- 要在哪一個Bean上面建立事務代理對象 -->
    <property name="target" ref="productDao" />
    <!-- 指定事務屬性 -->
    <property name="transactionAttributes">
        <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>
複製代碼

  案例分析(上面有三大配置):express

  • 事務管理器transactionManager
  • 事務配置的提供者transactionAttributes(用於指定哪些方法具備什麼樣的事務配置)

    有了以上2個元素,咱們就能夠建立出一個事務攔截器TransactionInterceptorspa

  • 要代理的對象target

TransactionProxyFactoryBean這個工廠bean建立代理對象的原理就是:經過ProxyFactory來對target建立出代理對象了,同時加入上述事務攔截器,就能夠實現事務攔截功能了代理

 

  2.2 使用aop:config和tx:advice

    使用TransactionProxyFactoryBean的方式只能針對一個target進行代理,若是想再代理一個target,就須要再配置一個TransactionProxyFactoryBean,比較麻煩,因此使用apo:config的配置形式,就能夠針對符合Pointcut的全部target均可以進行代理。code

    配置案例以下:xml

複製代碼
<tx:advice id="txAdvice" transaction-manager="transactionManager">  
    <tx:attributes>  
        <tx:method name="add*" propagation="REQUIRED" />  
        <tx:method name="delete*" propagation="REQUIRED" />  
        <tx:method name="update*" propagation="REQUIRED" />  
        <tx:method name="add*" propagation="REQUIRED" />    
    </tx:attributes>  
</tx:advice>  

<aop:config>  
    <aop:pointcut id="pointcut" 
        expression="XXXX" />  
    <aop:advisor advice-ref="txAdvice" 
        pointcut-ref="pointcut" />  
</aop:config>
複製代碼

 

  案例分析(上面有兩大配置):對象

  • tx:advice:   有事務管理器transactionManager和事務配置提供者attributes,就能夠產生一個事務攔截器TransactionInterceptor
  • aop:config: 這裏會對符合pointcut的bean建立出代理對象,同時加入上述建立的事務攔截器

 

2.3 使用@Transactional

  使用aop:config能夠在xml中進行代理的配置,有時候想在代碼中直接進行配置,這時候就須要使用註解@Transactional。blog

  案例以下(xml中啓動@Transactional註解掃描):事務

    <!-- 開啓註解事務管理 -->
    <tx:annotation-driven transaction-manager="txManager" />

  這樣在代碼中就能夠經過配置@Transactional來實現事務攔截了get

  在xml配置中啓動註解掃描,會把那些加入了@Transactional標記的容器bean建立出代理對象,同時加入事務攔截器。在執行事務攔截的時候,會從@Transactional註解中取出對應的事務配置和事務管理器配置,進而能夠執行事務的建立等操做。

相關文章
相關標籤/搜索