原始bean.xml文件配置如下:【xml方式】
<!--
1.引入db.properties
2.创建DriverManagerDataSource 设置4个属性
3.创建JdbcTemplate 注入dataSource
-->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--包扫描-->
<context:component-scan base-package="com.it.xml"/>
<!--1.要在bean.xml中创建spring的平台事务管理器 (DataSourceTransactionManager ) 注入dataSource-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--2.我们需要创建一个 tx:advice 增强-->
<!--里面定义了筛选那些方法进行事务控制, 设置事务的隔离级别规则, 设置事务传播行为的规则 , 设置事务超时时间 设置事务是否只读..-->
<tx:advice id="adviceId" transaction-manager="transactionManager">
<tx:attributes>
<!--
该增强中的规则:
name代表筛选那些方法收到事务的增强
isolation : 隔离级别 REPEATABLE_READ 可重复读
propagation: 传播行为
read-only: 是否为只读事务
timeout: 事务是否超时
-->
<tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" timeout="-1" />
</tx:attributes>
</tx:advice>
<!--3.配置aop-->
<aop:config>
<!--3.1 配置切点-->
<aop:pointcut id="pointcut01" expression="execution(* *..transfer(..))"/>
<!--3.2 配置切点和增强的组合-->
<aop:advisor advice-ref="adviceId" pointcut-ref="pointcut01"/>
</aop:config>
</beans>
注解方式改造后的bean.xml配置如下:
<!--
1.引入db.properties
2.创建DriverManagerDataSource 设置4个属性
3.创建JdbcTemplate 注入dataSource
-->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--包扫描-->
<context:component-scan base-package="com.it.annotation"/>
<!--1.要在bean.xml中创建spring的平台事务管理器 (DataSourceTransactionManager ) 注入dataSource-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--2.配置注解驱动-->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
总结:
使用注解事务管理:
1.先配置包扫描,添加 注解驱动 (支持注解方式的事务)
2. 实现类上添加@Repository @Service) 注入的时候使用@Autowried自动注入
3.给AccountServiceImpl 类上添加一个@Transactional注解即可