在《spring + struts 应用集成小例 》中,我们的struts已可与spring的中间业务曾交流了,现在我们需要配置那个zoneManager(如果还记得的话)
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/> ←事务管理器
<property name="transactionAttributes"> ←事务的属性源
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="zoneManager" parent="txProxyTemplate">
<property name="target"> ←指定被代理的对象
<bean class="com.eatent.service.impl.ZoneManagerImpl">
<property name="zoneDao" ref="zoneDao"/>
</bean>
</property>
</bean>
要在spring应用中使用声明式事务,得用TransactionProxyFactoryBean。PROPAGATION_REQUIRED,readOnly等表示不同的事务传播的规则,这里不一一说明。这里关键是用了通配符“*”对多个方法声明了事务策略。
transactionManager属性指定了一个PlatformTransactionManager的实例,如:
<!-- Transaction manager for a single JDBC DataSource -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
spring的事务管理器将事务管理的责任委托给特定平台的事务实现。这里我们使用JDBC事务在单一的JDBC DataSource中管理事务。