• spring声明式事务管理


    Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

    声明式事务管理分为两种:1.配置文件   2.注解

    1.配置文件(声明式事务管理)用法

      在applicationContext.xml配置文件中配置①事务管理器(事务管理者)、②事务参数(事务通知)、③AOP配置     

    如下: 

    applicationContext.xml配置文件代码

     1    <!-- 事务管理器(事务管理者) -->
     2     <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
     3         <property name="sessionFactory" ref="mySessionFactory"></property>
     4     </bean>
     5     <!-- 事务参数(事务通知) -->
     6     <tx:advice id="txAdvice" transaction-manager="transactionManager">
     7         <tx:attributes>
             <!-- 指定名字为add的方法进行声明式事务管理 (指定方法)--> 8 <tx:method name="add*" propagation="REQUIRED" /> 9 <tx:method name="del*" propagation="REQUIRED" /> 10 <tx:method name="mod*" propagation="REQUIRED" /> 11 <tx:method name="*" propagation="REQUIRED" read-only="true" /> 12 </tx:attributes> 13 </tx:advice> 14   <!-- AOP的配置,(指定包) --> 15 <aop:config> 16 <aop:pointcut id="interceptorPointCuts" 17 expression="execution(* 18 news.dao.*.*(..))" /> 19 <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" /> 20 </aop:config>

     注意:可以在<tx:advice>中的<tx:method>的name属性指定要进行声明式事务管理的方法

    2.注解(声明式事务管理)用法:

    比如我们要在service类中使用事务,那么就得先在service类上面添加@Transactional,声明这个service类中所有方法需要事务管理。然后在applicationContext.xml配置文件中配置事务管理者即可(如下):

    service类代码

    @Transactional(声明本类所有方法需要进行事务管理)
    public class NewsServiceImpl implements NewsService {
    
      ...
    
    }

    applicationContext.xml文件代码

     1     <!-- 事务管理器(事务管理者) -->
     2     <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
     3         <property name="sessionFactory" ref="mySessionFactory"></property>
     4     </bean>

    总结:以上就是两种方式使用声明式事务管理(1.配置文件 2.注解)。两种方式都可以实现事务管理,使用注解一步到位,为什么我们还要学一个这么复杂的xml文件配置来实现事务管理呢。博主在当时学习的时候同样有这样的疑问。在这里我简单解析一下这两者如何取舍。一,xml文件配置可以实现使我们的代码简化,并一定程度上与代码解耦,一旦我们的工程需要替换框架,只需改动配置,而无需改动源码。二,使用注解可以非常直观的理解我们的源码,提高了可读性,不过只建议在一个相对较小,框架固定的工程中使用。具体该使用哪种方式还得依据具体情况分析。

  • 相关阅读:
    Mybatis 动态sql(转载)
    mapper映射文件配置之select、resultMap(转载)
    mapper映射文件配置之insert、update、delete(转载)
    MyBatis主配置文件(转载)
    函数装饰器和闭包(二)
    函数装饰器和闭包(一)
    指针的指针(二)
    指针的指针(一)
    Makefile基础(三)
    Python之多线程与多进程(二)
  • 原文地址:https://www.cnblogs.com/gt18552/p/5993093.html
Copyright © 2020-2023  润新知