Spring 中的事务控制

编程式事务、这里不讲,就是将事务的开启关闭写在代码里。不做重点。

1、Spring的声明式事务控制

编程式事务管理将数据层提交事务的代码加入逻辑层,与Spring无侵入式编程思想的主思想冲突,实际开发过程中,往往采用声明式事务管理形式

通过编程式事务管理的代码不难看出,在业务逻辑层对应的业务上添加某些代码即可完成整体事务管理的操作,SpringAOP的思想,将公共的代码加入后,即可完成对应的工作,这就是声明式事务管理的核心机制。

1‘.1、基于XML的声明式事务配置

a、导入spring事务支持的jar包spring-tx-3.2.0.RELEASE.jar

b、引入spring事务的名称空间
Spring 中的事务控制_第1张图片

c、配置spring的事务支持

  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       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/tx   
                           http://www.springframework.org/schema/tx/spring-tx.xsd  
                           http://www.springframework.org/schema/aop   
                           http://www.springframework.org/schema/aop/spring-aop.xsd">  
      
    <bean id="accountDao" class="springTX.dao.impl.AccountDaoImpl">  
          
        <property name="dataSource" ref="driverManagerDataSource">property>  
    bean>  

      
    <bean id="accountService" class="springTX.service.impl.AccountServiceImpl">  
        <property name="accountDao" ref="accountDao">property>  
    bean>  

      
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="driverManagerDataSource">property>  
    bean>  
    <tx:advice id="txAdivce" transaction-manager="transactionManager">  
          
        <tx:attributes>  
              
            <tx:method name="*" />  
            <tx:method name="find*" read-only="true"/>  
        tx:attributes>  
    tx:advice>  
    <aop:config>  
        <aop:advisor advice-ref="txAdivce" pointcut="execution(* springTX..*.*(..))"/>  
    aop:config>  
      
    <bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
          
        <property name="driverClassName" value="com.mysql.jdbc.Driver">property>  
        <property name="url" value="jdbc:mysql://localhost:3306/spring_tx">property>  
        <property name="username" value="root">property>  
        <property name="password" value="1234">property>  
    bean>  
beans>  

OK、基于xml的声明式事务、配置完毕。

2、基于注解的声明式事务配置

a、把spring容器管理改为注解配置的方式(开启要扫描的包)

b、开启注解事务的支持
Spring 中的事务控制_第2张图片

配置结果如下:

  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:aop="http://www.springframework.org/schema/aop"  
       xmlns:tx="http://www.springframework.org/schema/tx"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans   
                           http://www.springframework.org/schema/beans/spring-beans.xsd   
                           http://www.springframework.org/schema/tx   
                           http://www.springframework.org/schema/tx/spring-tx.xsd  
                           http://www.springframework.org/schema/aop   
                           http://www.springframework.org/schema/aop/spring-aop.xsd   
                           http://www.springframework.org/schema/context   
                           http://www.springframework.org/schema/context/spring-context.xsd">  
      
    <context:component-scan base-package="springTX">context:component-scan>  

    <tx:annotation-driven transaction-manager="transactionManager"/>  

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="driverManagerDataSource">property>  
    bean>  
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
        <property name="dataSource" ref="driverManagerDataSource">property>  
    bean>  

      
    <bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
          
        <property name="driverClassName" value="com.mysql.jdbc.Driver">property>  
        <property name="url" value="jdbc:mysql://localhost:3306/srping_tx">property>  
        <property name="username" value="root">property>  
        <property name="password" value="1234">property>  
    bean>  
beans>  

c、在需要事务支持的地方加入@Transactional注解(一般在service层控制事务)
d、@Transactional注解配置的位置

用在业务实现类上:该类所有的方法都在事务的控制范围
这里写图片描述

用在业务接口上:该接口的所有实现类都起作用

这里写图片描述
通过注解指定事务的定义信息
Spring 中的事务控制_第3张图片

OK、基于注解的事务也整理完毕!

你可能感兴趣的:(Spring)