当前位置:文档之家› Spring 自动事务代理

Spring 自动事务代理

spring 同时支持编程事务策略和声明式事务策略,大部分时候,都推荐使用声明式事务策略,使用声明式事务策略的优势十分明显。

对于使用声明式事务策略,可以使用TransactionProxyFactoryBean来配置事务代理Bean。

正如它的类名所暗示的,它是一个工厂Bean,工厂Bean用于生成一系列的Bean实例,这一系列的Bean实例都是Proxy.这种事务代理正是基于Spring AOP组件。

配置TransactionProxyFactoryBean时,一样需要指定目标Bean.
每个TransactionProxyFactoryBean为一个目标Bean生成事务代理,事务代理的方法改写了目标Bean的方法,就是在目标Bean的方法执行之前加入了事务,在目标Bean的方法正常结束之前提交事务,如查遇到了异常则回滚事务。

TransactionProxyFactoryBean创建事务代理时,需要了解当前事务所处的环境,该环境属性通过PlatformTransactionManager实例传入,而相关事务传入规则在TransactionProxyFactoryBean的定义中给出.
<!-- 配置事务拦截器Bean -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterce ptor">
<!-- 为事务拦截器bean注入一个事物管理器 -->
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<!-- 定义事务传播属性 -->
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
<prop key="set*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 为bean创建事务代理 -->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyC reator">
<!-- 指定满足哪些bean自动生成业务代理 -->
<property name="beanNames">
<!-- 需要自动创建事务代理的bean -->
<list>
<value>*0*IF</value>
</list>
<!-- 其它需要自动创建事务代理的bean -->
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!-- 可增加其它的interceptor -->
</list>
</property>
</bean>
<!-- hibernate 事务配置-->
<!-- 所有符合条件的方法将被放在事务中执行.方法的配置可以是正则表达式,如下的:创建,添加,删除,更新-->
<bean id="daoTransactionFactory" lazy-init="false"
class="org.springframework.transaction.interceptor.TransactionProxyFa ctoryBean"
abstract="true">
<property name="transactionManager">
<ref local="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>。

相关主题