基于AspectJ的XML方式
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务的通知:(事务的增强) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT" />
<!--
<tx:method>标签中的属性:
propagation :事务的传播行为
isolation :隔离级别
read-only :只读
rollback-for:发生哪些异常回滚
no-rollback-for:发生哪些异常不要回滚
timeout :过期信息
-->
</tx:attributes>
</tx:advice>
<!-- 配置aop的切面 -->
<aop:config>
<!-- 切入点 前面*代表返任意回值 ,其中AccountService+.*(..)的 +代表子类 / .*任意方法 / (..)任意参数-->
<aop:pointcut expression="execution(* demo3.AccountService+.*(..))" id="pointcut1"/>
<!-- 切面
<aop:advisor> :一个切入点,一个通知
<aop:aspect> :多个切入点,多个通知 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
</aop:config>
主要是aop方式的事务管理
基于注解的方式
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
业务层实现类添加注解
/**
* 转账案例的业务层实现类
* @author kyulin
*
* @Transactional注解中的属性:
* propagation :传播行为
* isolation :隔离级别
* readOnly :只读
* rollbackFor :发生哪些异常回滚
* noRollbackFor:发生哪些异常不回滚
*/
@Transactional
//@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=true)
public class AccountServiceImpl implements AccountService {
//注入转账的DAO的类
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao) {
this.accountDao = accountDao;
}
/**
*
* @param out :转出的账号
* @param in :转入的账号
* @param money :转账金额
*/
@Override
public void transfer(String out, String in, Double money) {
// TODO Auto-generated method stub
accountDao.outMoney(out, money);
int d = 1/0;
accountDao.inMoney(in, money);
}
}
总结: