链接:http://dylanxu.iteye.com/blog/1308790
事务处理的几种方式-链接:http://blog.csdn.net/wm5920/article/details/8174619 (待研究)
spring_声明式事务处理
---方式一:采用@Transactional Annotation实现声明式事物管理
@Transactional可以修饰SpringBean类,也可以修饰Bean类中的某个方法,代表不同的事务设置方式。
步骤1:采用@Transactional修饰需要添加事务的类或方法
public class NewsDaoImpl implements NewsDao { ... @Transactional(propagation=Propagation.REQUIRED) public void insert(String title, String content) { ... } }
步骤2:配置让Spring能根据Annotation来配置事务代理
<!-- 配置JDBC数据源的局部事务管理器,使用DataSourceTransactionManager 类 --> <!-- 该类实现PlatformTransactionManager接口,是针对采用数据源连接的特定实现--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 配置DataSourceTransactionManager时需要依注入DataSource的引用 --> <property name="dataSource" ref="dataSource"/> </bean> <!-- 根据Annotation来生成事务代理 --> <tx:annotation-driven transaction-manager="transactionManager"/>
---方式二:采用XML配置方式实现事务增强处理
<?xml version="1.0" encoding="GBK"?> <!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 --> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 定义数据源Bean,使用C3P0数据源实现 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> ... </bean> <!-- 配置一个业务逻辑Bean --> <bean id="newsDao" class="org.crazyit.app.dao.impl.NewsDaoImpl"> <property name="ds" ref="dataSource"/> </bean> <!-- 配置JDBC数据源的局部事务管理器,使用DataSourceTransactionManager 类 --> <!-- 该类实现PlatformTransactionManager接口,是针对采用数据源连接的特定实现--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置事务增强处理,指定事务管理器 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 所有以'get'开头的方法是read-only的 --> <tx:method name="get*" read-only="true"/> <!-- 其他方法使用默认的事务设置 --> <tx:method name="*"/> </tx:attributes> </tx:advice> <!-- AOP配置的元素 --> <aop:config> <!-- 配置一个切入点,匹配org.crazyit.app.dao.impl包下所有以Impl结尾的类里、所有方法的执行 --> <aop:pointcut id="myPointcut" expression="execution(* org.crazyit.app.dao.impl.*Impl.*(..))"/> <!-- 指定在txAdvice切入点应用txAdvice事务增强处理 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/> </aop:config> </beans>
注:摘自轻量级JavaEE企业应用实战第三版