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注解中取出对应的事务配置和事务管理器配置,进而能够执行事务的建立等操做。

相关文章
相关标签/搜索