Spring对事务的支持
演示转账业务:spring原本是无事务的
1.spring-tx.xml文件
2.DAO层实现类
**3.service层默认是无事务的,存在转账隐患
**
4.demo1类
基于XML配置的spring事务
-
核心对象 平台事务管理器(PlatformTransactionManager)
- 基于JDBC事务的实现:
DataSourceTransactionManager
- 将它注册到Spring 容器中。
- 基于JDBC事务的实现:
<!--1. 基于XML配置的事务管理-->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--它依赖的是一个DataSource对象-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--通知:增强(人家已经写好了)
id 属性是 bean的名字
transaction-manager 属性值引用上面的 事务管理器的bean 的名字
-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 定义某类方法应用的一些事务属性。 -->
<tx:attributes>
<!--
目标方法的事务属性的设置
-->
<tx:method name="get*" read-only="true"/>
<tx:method name="save" read-only="false"/>
<tx:method name="*" read-only="false"/>
</tx:attributes>
</tx:advice>
<!--使用Aop进行配置-->
<aop:config>
<aop:pointcut id="pt" expression="execution(* com.example.spring..*ServiceImpl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt" />
</aop:config>
基于注解配置
-
核心对象 平台事务管理器(PlatformTransactionManager)
- 基于JDBC事务的实现:
DataSourceTransactionManager
- 将它注册到Spring 容器中。
- 基于JDBC事务的实现:
-
在需要进行事务控制的类上(Service实现类)使用注解:
@Transactional
- 此注解既可以使用在类上,也可以使用在方法上。
-
在Spring配置文件中,开启注解事务的支持。
<!--1. 基于XML配置的事务管理-->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--它依赖的是一个DataSource对象-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--开启Spring的注解式事务-->
<tx:annotation-driven transaction-manager="transactionManager"/>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3zywByTi-1598951347709)(imges/image-20200901161316483.png)]
@Transactional注解标记在类上,表示类中的所有方法都会采用事务。