【济南中心】 Spring事务管理的方式
1.spring支持编程式事务管理和声明式事务管理两种方式
编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。
声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。
2. Spring配置文件中是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。 DataSource、 TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为 SessionFactory,TransactionManager的实现为HibernateTransactionManager.
1.编程式事务
编程式即采用注解的方式,需要注意的是,使用注解的方式需要在Spring的配置文件中加入一句话:,其作用是开启注解的方式。具体配置如下:
name="configLocation">
classpath:config/hibernate.cfg.xml
name="packagesToScan">
com.entity
name="sessionFactory"ref="sessionFactory">
声明式事务
公共配置
name="configLocation">
classpath:config/hibernate.cfg.xml
com.entity
name="sessionFactory"ref="sessionFactory">
name="sessionFactory"ref="sessionFactory">
第一种,使用tx标签方式
name="add*"propagation="REQUIRED"
rollback-for="Exception"/>
name="modify*"propagation="REQUIRED"
rollback-for="Exception"/>
rollback-for="Exception"/>
name="*"propagation="REQUIRED"
read-only="true"/>
id="daoMethod"expression="execution(*com.dao.*.*(..))"/>
pointcut-ref="daoMethod"advice-ref="txadvice"/>
expression="execution(*com.dao.*.*(..))"
其中第一个*代表返回值,第二*代表dao下子包,第三个*代表方法名,“(..)”代表方法参数。
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
name="transactionManager"
ref="transactionManager">
name="transactionAttributes">
PROPAGATION_REQUIRED, -Exception
key="modify*">PROPAGATION_REQUIRED,-Exception
PROPAGATION_REQUIRED,
-Exception
PROPAGATION_REQUIRED,
readOnly
name="target">
name="sessionFactory"ref="sessionFactory">
将transactionProxy的abstract属性设置为"true",然后将具体的Dao的parent属性设置为"transactionProxy",可以精简代码。
第三种,使用拦截器
name="transactionManager"
ref="transactionManager">
name="transactionAttributes">
PROPAGATION_REQUIRED,
-Exception PROPAGATION_REQUIRED,-Exception
PROPAGATION_REQUIRED,
-Exception
PROPAGATION_REQUIRED,
readOnly
name="interceptorNames">
transactionInterceptor
name="beanNames">
*Dao
如果你想了解更多黑马课程请点击这里,如果你想加入黑马这个大家庭学习先进技术,广交天下好友!{:7_357:}
黑马程序员济南中心联系电话:0531-55696830