Spring框架事务的本质

Spring框架事务管理的分类
编程式事务
声明式事务
编程式事务
<!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean>
<!-- 配置事务管理的模板 --><bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager" ref="transactionManager"/></bean>
<bean id="accountService" class="com.cmpay.spring.service.AccountServiceImpl"><property name="accountDao" ref="accountDao"/><property name="transactionTemplate" ref="transactionTemplate"/></bean>
// 注入事务模板对象private TransactionTemplate transactionTemplate;public void setTransactionTemplate(TransactionTemplate transactionTemplate) {this.transactionTemplate = transactionTemplate;}public void pay(final String out, final String in, final double money) {transactionTemplate.execute(new TransactionCallbackWithoutResult() {protected void doInTransactionWithoutResult(TransactionStatus status)// 扣钱accountDao.outMoney(out, money);int a = 10/0;// 加钱accountDao.inMoney(in, money);} });}
声明式事务
基于AspectJ的XML方式
基于AspectJ的注解 + XML混用方式
基于AspectJ的纯注解方式
基于AspectJ的XML方式
-- 事务配置<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"<property name="driverClass" value="com.mysql.jdbc.Driver" ><property name="jdbcurl" value="jdbc:mysql://web01" ><property name="user" value="root" ><property name="password" value="root" ></bean><bean class="com.cmpay.dao.AccountDaoImpl"<property name="dataSource" ref="dataSource" ></bean><context:componet-scan base-package="com.cmpay.service"/ >--平台事务管理器<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"<property name="datasource" ref="datasource" ></bean>--事务通知<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:method name="transfer*" ></tx:advice>--aop配置<aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.cmpay..service.*.*(..))" ></aop:config>
基于AspectJ的注解 + XML混用方式
类上加@Transactional:表示该类中所有的方法都被事务管理
方法上加@Transactional:表示只有该方法被事务管理
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"<property name="dataSource" ref="datasource"/></bean><tx:annotation-driven transaction-manager="transactionManager" />
基于AspectJ的纯注解方式
@EnableTransactionManagement
文章转载自Alleria Windrunner,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




