String学习(十六)-使用Xml文件配置事务

来源:互联网 发布:网络销售应该怎么做 编辑:程序博客网 时间:2024/06/07 09:01

重点是xml文件的配置:

1.applicationcontext-xml.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:context="http://www.springframework.org/schema/context"        xmlns:tx="http://www.springframework.org/schema/tx"        xmlns:aop="http://www.springframework.org/schema/aop"        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">  <context:component-scan base-package="com.spring"></context:component-scan>                       <!-- 导入资源文件 -->  <context:property-placeholder location="classpath:db.properties"/>  <!-- 配置C3p0数据源 -->  <bean id="dataSource"   class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">           <property name="driverClass" value="${jdbc.driverClass}"/>           <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>          <property name="user" value="${jdbc.user}"/>              <property name="password" value="${jdbc.password}"/>           <property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>           <property name="minPoolSize" value="${jdbc.minPoolSize}"/>           <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>       </bean>  <!-- 配置Spring中JdbcTemplate(Jdbc模板类) --><bean id="jdbcTemplate"     class="org.springframework.jdbc.core.JdbcTemplate">    <property name="dataSource" ref="dataSource"/></bean><!-- 配置Bean --><bean id="bookShopDao"    class="com.spring.tx.xml.BookShopImpl">    <property name="jdbcTemplate" ref="jdbcTemplate"></property>    </bean><bean id="bookShopService"    class="com.spring.tx.xml.BookShopServiceImpl">    <property name="bookShopDao" ref="bookShopDao"></property></bean><bean id="cashier"    class="com.spring.tx.xml.CashierImpl">    <property name="bookShopService" ref="bookShopService"></property></bean><!-- 1.配置事务管理器 --><bean id="transactionManager"     class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <property name="dataSource" ref="dataSource"></property></bean><!-- 2.配置事务属性 --><tx:advice id="txAdvice" transaction-manager="transactionManager">    <tx:attributes>    <!-- 根据方法名之指定事务的属性 -->        <tx:method name="purchase" propagation="REQUIRES_NEW"/>        <tx:method name="get*" read-only="true"/>        <tx:method name="find*" read-only="true"/>        <tx:method name="*"/>    </tx:attributes></tx:advice><!-- 3.配置事务切入点,以及把事务切入点和事务属性关联起来  --><aop:config>    <aop:pointcut expression="execution(* com.spring.tx.xml.BookShopServiceImpl.*(..))"         id="txPointCut"/>        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/></aop:config> </beans>

2.测试类

package com.spring.tx.xml;import java.util.Arrays;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTransactionTest {    private ApplicationContext ctx=null;    private BookShopDao bookShopDao=null;    private BookShopService bookShopService=null;    private Cashier cashier=null;    {        ctx=new ClassPathXmlApplicationContext("springXML/applicationContext-xml.xml");        bookShopDao=ctx.getBean(BookShopDao.class);        bookShopService=ctx.getBean(BookShopService.class);        cashier=ctx.getBean(Cashier.class);    }    @Test    public void testTransactionlPropagation() {        cashier.checkout("AA", Arrays.asList("1001","1002"));    }    @Test    public void testBookShopService() {        bookShopService.purchase("AA", "1001");    }}

3.实现类

package com.spring.tx.xml;public class BookShopServiceImpl implements BookShopService {    public BookShopDao bookShopDao;    public void setBookShopDao(BookShopDao bookShopDao) {        this.bookShopDao = bookShopDao;    }    public void purchase(String username, String isbn) {        try {            Thread.sleep(2000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        //1.获取书的单价        int price=bookShopDao.findBookPriceByIsbn(isbn);        //2.更新书的库存        bookShopDao.updateBookStock(isbn);        //3.更新用户余额        bookShopDao.updateUserAccount(username, price);    }}
package com.spring.tx.xml;import java.util.List;public class CashierImpl implements Cashier {    private BookShopService bookShopService;    public void setBookShopService(BookShopService bookShopService) {        this.bookShopService = bookShopService;    }    @Override    public void checkout(String username, List<String> isbns) {        for(String isbn:isbns) {            bookShopService.purchase(username, isbn);        }    }}
阅读全文
0 0
原创粉丝点击