zoukankan      html  css  js  c++  java
  • Spring事务管理的xml方式

    一个业务的成功: 调用的service是执行成功的,意味着service中调用的所有的dao是执行成功的。  事务应该在Service层统一控制。

    如果手动去实现,则需要对dao进行代理,在方法前后进行事务操作和异常处理,需要AOP和代理,不过spring已经集成该功能可以直接声明使用。

    事务控制概述

    编程式事务控制

             自己手动控制事务,就叫做编程式事务控制。

             Jdbc代码:

                       Conn.setAutoCommite(false);  // 设置手动控制事务

             Hibernate代码:

                       Session.beginTransaction();    // 开启一个事务

             【细粒度的事务控制: 可以对指定的方法、指定的方法的某几行添加事务控制】

             (比较灵活,但开发起来比较繁琐: 每次都要开启、提交、回滚.)

     

    声明式事务控制

             Spring提供了对事务的管理, 这个就叫声明式事务管理。

             Spring提供了对事务控制的实现。用户如果想用Spring的声明式事务管理,只需要在配置文件中配置即可; 不想使用时直接移除配置。这个实现了对事务控制的最大程度的解耦。

             Spring声明式事务管理,核心实现就是基于Aop。

             【粗粒度的事务控制: 只能给整个方法应用事务,不可以对方法的某几行应用事务。】

             (因为aop拦截的是方法。)

             Spring声明式事务管理器类:

                       Jdbc技术:DataSourceTransactionManager

                       Hibernate技术:HibernateTransactionManager

    案例<?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd
             http://www.springframework.org/schema/aop
             http://www.springframework.org/schema/aop/spring-aop.xsd
             http://www.springframework.org/schema/tx
              http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        
        <!-- 1. 数据源对象: C3P0连接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
            <property name="jdbcUrl" value="jdbc:mysql:///hib_demo"></property>
            <property name="user" value="root"></property>
            <property name="password" value="root"></property>
            <property name="initialPoolSize" value="3"></property>
            <property name="maxPoolSize" value="10"></property>
            <property name="maxStatements" value="100"></property>
            <property name="acquireIncrement" value="2"></property>
        </bean>
        
        <!-- 2. JdbcTemplate工具类实例 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        
        <!-- 3. dao实例 -->
        <bean id="deptDao" class="cn.itcast.a_tx.DeptDao">
            <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean> <!-- 4. service实例 --> <bean id="deptService" class="cn.itcast.a_tx.DeptService"> <property name="deptDao" ref="deptDao"></property> </bean> <!-- #############5. Spring声明式事务管理配置############### --> <!-- 5.1 配置事务管理器类 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property>
       </bean>
        
        <!-- 5.2 配置事务增强(如何管理事务?) -->
        <tx:advice id="txAdvice" transaction-manager="txManager">
            <tx:attributes>
                <tx:method name="get*" read-only="true"/>
                <tx:method name="find*" read-only="true"/>
                <tx:method name="*" read-only="false"/>
            </tx:attributes>
        </tx:advice>
        
        <!-- 5.3 Aop配置: 拦截哪些方法(切入点表表达式) + 应用上面的事务增强配置 -->
        <aop:config>
            <aop:pointcut expression="execution(* cn.itcast.a_tx.DeptService.*())" id="pt"/>
            <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
        </aop:config>
        
    </beans>  
  • 相关阅读:
    Android 使用html做UI的方法js与java的相互调用
    WebRequest之HttpWebRequest实现服务器上文件的下载(一)
    使用Json比用string返回数据更友好,也更面向对象一些
    DES加密与解密在GET请求时解密失败的问题解决(终级)
    中大型系统架构组合之EF4.1+ASP.NET MVC+JQuery
    说说标准服务器架构(WWW+Image/CSS/JS+File+DB)
    inline内联函数和宏的区别
    [C语言]mac下Des CBC加密
    x264和FFMPEG 编译后遇到的一些问题:UINT64_C,
    关于多线程的那些事
  • 原文地址:https://www.cnblogs.com/webyyq/p/7483356.html
Copyright © 2011-2022 走看看