spring声明式事务管理

 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框架的耦合性程度高,但是代码的可读性较高。

   

原文地址:https://www.cnblogs.com/chaoben/p/5849794.html