10、事务支持
l Spring支持声明式事务支持,不需要编码,就能实现事务处理
l 由于Spring声明式事务支持通过Spring AOP实现,除了已经追加的spring-aop.jar,还需要追加依赖的jar文件:
Ø aopalliance.jar
(1) 事务管理
l Spring使用一组事务管理器来管理各种实现的持久机制
l JDBC和iBatis使用jdbc.datasource.DataSourceTransactionManager:
<bean id=”transactionManager”
class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
<property name=”dataSource” ref=”dataSource” />
</bean>
l Hibernate使用orm.hibernate3.HibernateTransactionManager:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
(2) 代理事务
l Spring提供TransactionProxyFactoryBean来代理事务:
<bean id="txProxyTemplate"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">
PROPAGATION_REQUIRED,-java.lang.Exception
</prop>
</props>
</property>
</bean>
l 这里引用transactionManager,以便代理不同的事务
l transactionAttributes可以指定事务属性,格式如下:
PROPAGATION, ISOLATION, readOnly, -Exception, +Exception
(3) 实现事务支持
l DAO调用在业务层,所以事务支持应该在业务层实现
l 有了事务代理,只要继承该代理并指定目标为业务对象就可以了:
<bean id="userService" parent="txProxyTemplate">
<property name="target" ref="userServiceTarget" />
</bean>
<bean id="userServiceTarget"
class="org.xqtu.samples.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>