spring的事务管理
spring的事务管理有两种,一种是编程式的事务管理,还有一种是声明式事务管理。编程式事务管理比较灵活,但是代码量大,存在相互重复的代码;声明式事务管理比编程式事务管理更为灵活。
一、声明式事务管理(配置文件+spring注解)
1、搭建好相关的ssh框架应用。
2、编写相关的配置文件:applicationContext.xml 具体请参考如下代码:
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="mySessionFactory"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager" />
3、spring注解:
⑴、在类上注解:
↓
⑵、在具体的方法上注解:
二、声明式事务管理(纯spring配置文件)
1、搭建好相关的ssh框架
2、配置声明式事务管理的spring的配置文件:applicationContext.xml,具体请参考代码:
假定这个tx:advice 标签是springAOP中 handler
那么下面的aop:config就是springAOP中的target
解析:
tx:advice假定是handler(代理),这个handler需要引用一个(事务管理器)transactionManager。
定义一个bean作为事务管理对象,添加一个class属性,值需要为hibernate5.X的版本。
tx:attributes标签下的子标签有一个tx:method中的name属性是dao中的方法名,一般来说是add(增)delete(删)modify(改)query(查询),查询一般设置只读。这里使用通配符以适应不用的命名规则。propagation设置事务的传播行为,一般设置为默认值REQUIRED。
aop:config下的aop:pointcut标签,顾名思义切面。其中expression设置是哪里需要添加事务管理,也就是AOP中的切面。比如说:开启事务,提交事务,关闭session等这些通用的相同的代码,把他们设置为一个切面。免去重复书写。本例在dao包下的所有方法进行添加事务管理,也就是在dao包所有的类都不需要做开启事务,提交事务,关闭session的事情了,这些事情全部交给transactionManager来做。
最后的aop:advisor标签把tx:advice和aop:pointcut进行连接,实现了声明式事务管理。
。。。。。。。。。。。。。。。。
纯配置文件和配置文件+注解区别: 二者的最大的区别就是耦合性的问题。纯配置文件和spring框架的耦合程度低,而配置文件+注解和spring框架的耦合性程度高,但是代码的可读性较高。