1.spring基于XML的声明式事务环境搭建
(1)创建java项目,导入jar包
包括IOC,AOP,数据库驱动,以及数据库事务相关:

合计如下:

(2)创建模拟的service和dao

(3)创建bean.xml。添加beans,aop,tx的名称空间
配置servcie和dao的bean以及配置spring内置数据源

(4)配置spring的声明式事务控制
<!-- spring基于XML的声明式事务控制 -->
<!-- 第一步 配置事务管理器 -->
<bean id="transcationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 第二步:配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 第四步 配置事务属性
isolation:配置事务隔离级别,默认值是DEFAULT,使用数据库的默认隔离级别。mysql数据库是REPEATABLE_READ
propagation:配置事务传播行为。默认值是REQUIRED,一般的选择,适用增删改方法,当时查询方法时使用SUPPORTS
read-only:配置是否只读事务,默认值false,读写型事务。当指定为true时,只读事务,只能用于查询方法
timeout:指定事务的超时时间。默认值是-1,永不超时,当指定其他值时,以秒为单位
rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚,当产生其他异常时,事务不回滚。没有默认值,任何异常都回滚
no-rollback-for:用于指定一个异常,当执行产生该异常时,事务不回滚,当产生其他异常时,事务回滚。没有默认值,任何异常都回滚
-->
<tx:attributes>
<!-- 通配查询方法 优先级较高 -->
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<!-- 通配增删改方法 -->
<tx:method name="*" propagation="REQUIRED" read-only="false"/>
</tx:attributes>
</tx:advice>
<!-- 第三步 配置AOP-->
<aop:config>
<!-- 配置切入点表达式 -->
<aop:pointcut expression="execution(* com.huaiwei.service.impl.*.*(..))" id="pt1"/>
<!-- 配置切入点表达式和事务通知的关联关系 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
</aop:config>






