zoukankan      html  css  js  c++  java
  • Spring框架的事务管理之基于AspectJ的注解方式(重点掌握,最简单的方式)

    1. 步骤一:恢复转账的开发环境(具体开发环境实现见:https://www.cnblogs.com/wyhluckdog/p/10137283.html
    2. 步骤二:applicationContext的基本配置为:
    <?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:jdbc="http://www.springframework.org/schema/jdbc"
        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="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
             <property name="driverClass" value="com.mysql.jdbc.Driver"/>
             <property name="jdbcUrl" value="jdbc:mysql:///spring-day03"/>
             <property name="user" value="root"/>
             <property name="password" value="root"/>
         </bean>
        
       
    </beans>
    3. 步骤三:配置事务管理器
    <!-- 配置事务管理器 -->
         <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <property name="dataSource" ref="dataSource"/>
         </bean>
    4. 步骤四:开启注解事务
    <!-- 开启注解事务 -->
          <tx:annotation-driven transaction-manager="transactionManager"/>
    5.完整的applicationContext.xml配置文件的配置信息为:
    <?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:jdbc="http://www.springframework.org/schema/jdbc"
        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="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
             <property name="driverClass" value="com.mysql.jdbc.Driver"/>
             <property name="jdbcUrl" value="jdbc:mysql:///spring-day03"/>
             <property name="user" value="root"/>
             <property name="password" value="root"/>
         </bean>
        
            <!-- 配置事务管理器 -->
         <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <property name="dataSource" ref="dataSource"/>
         </bean>
      <!--      
        开启注解事务 -->
          <tx:annotation-driven transaction-manager="transactionManager"/>
          
        <bean id="accountDao" class="com.huida.demo1.AccountDaoImpl">
            <property name="dataSource" ref="dataSource"/>
        </bean>
         <bean id="accountService" class="com.huida.demo1.AccountServiceImpl">
                <property name="accountDao" ref="accountDao"/>
               <!--  <property name="transactionTemplate" ref="transactionTemplate"/> -->
         </bean>
    
        
         
    </beans>
    6.步骤五:在业务层上添加一个注解:@Transactional。
      * 以下是AccountServiceImpl的完整代码为:
    package com.huida.demo1;
    
    import javax.annotation.Resource;
    
    import org.springframework.transaction.TransactionStatus;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.transaction.support.TransactionCallbackWithoutResult;
    import org.springframework.transaction.support.TransactionTemplate;
    
    @Transactional
    public class AccountServiceImpl implements AccountService{
    
        @Resource(name="accountDao")
        private AccountDaoImpl accountDao;
        
    
        public void setAccountDao(AccountDaoImpl accountDao) {
            this.accountDao = accountDao;
        }
        @Override
        public void pay(String out,String in,double money) {
    
            //扣钱
            accountDao.outMoney(out, money);
            //加钱
            accountDao.inMoney(in, money);
        }
    
    }
    7. 步骤六:编写测试类
    package com.huida.demo1;
    
    import javax.annotation.Resource;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class Demo1 {
    
        @Resource(name="accountService")
        private AccountService accountService;
        
        @Test
        public void run1(){
            accountService.pay("小明","小红",1000);
        }
    }
    8.单元测试run1方法,刷新spring-day03数据库中的user表,可以看到小明的money减少了1000,小红的money增加了1000.


  • 相关阅读:
    Openjudge-NOI题库-简单算术表达式求值
    洛谷-求同构数的个数-NOIP2013提高组复赛
    洛谷-拼数-NOIP1998提高组复赛
    洛谷-统计数字-NOIP2007提高组复赛
    洛谷-谁拿了最多奖学金-NOIP2005提高组复赛
    Openjudge-NOI题库-字符串移位包含问题
    洛谷-乘积最大-NOIP2000提高组复赛
    NOIP2015-普及组复赛-第一题-金币
    Tyvj-超级书架
    Openjudge-NOI题库-出书最多
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10137848.html
Copyright © 2011-2022 走看看