spring事物管理--声明式(AspectJ)注解实现 (推荐使用)

1、表结构及数据

2、使用的jar包

3、service、Dao层接口与实现类:

Dao接口:

//转账案例持久层接口
public interface AccountDao {
    /**
     * @param out    :转出账号
     * @param money    :转账金额
     */
    public void outMoney(String out,Double money);

    /**
     * @param in    :转入账号
     * @param money    :转账金额
     */
    public void inMoney(String in,Double money);

}

Dao实现类:

//转账案例持久层实现类
public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao {

    /**
     * @param out    :转出账号
     * @param money    :转账金额
     */
    @Override
    public void outMoney(String out, Double money) {
        String sql = "update account set money = money - ? where name = ?";
        this.getJdbcTemplate().update(sql,money,out);
    }

    /**
     * @param in    :转入账号
     * @param money    :转账金额
     */
    @Override
    public void inMoney(String in, Double money) {
        String sql = "update account set money = money + ? where name = ?";
        this.getJdbcTemplate().update(sql,money,in);
    }
}

service接口:

//转账案例业务层接口
public interface AccountService {

    /**
     * @param out    :转出账号
     * @param in    :转入账号
     * @param money    :转账金额
     */
    public void transfer(String out,String in,Double money);
}

service实现类:

使用@Transactional事物注解,根据自身需求可以使用不同的注解属性propagation、isolation、readOnly、rollbackFor、noRollbackFor

//转账案例业务层实现类
@Transactional(propagation=Propagation.REQUIRED)//使用注解实现事务管理,根据需求使用不同的注解属性
public class AccountServiceImpl implements AccountService {

    //注入转账的Dao
    @Resource
    private AccountDao accountDao;

    /**
     * @param out    :转出账号
     * @param in    :转入账号
     * @param money    :转账金额
     */
    @Override
    public void transfer( String out,  String in,  Double money) {
                //把业务操作放入内部类中----在一个事物里面(同成功,同失败)
                accountDao.outMoney(out, money);
                int i = 1/0;   //异常测试
                accountDao.inMoney(in, money);
    }
}

4、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:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       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/aop
       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

    <!-- 引入外部属性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 配置c3p0连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

     <!-- 配置业务层类 -->
     <bean id="accountService" class="cn.xl.spring.demo4.AccountServiceImpl">
     </bean>

     <!-- 配置持久层类 -->
     <bean id="accountDao" class="cn.xl.spring.demo4.AccountDaoImpl">
         <property name="dataSource" ref="dataSource"></property>
     </bean>

     <!-- 事物管理器配置 -->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource"></property>
     </bean>

     <!-- 开启注解事物 -->
     <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

5、测试类:

//spring声明式事物管理的方式二的测试类:基于AspectJ的XML配置
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext4.xml")
public class SpringDemo4 {
    //需注入业务层代理对象
    @Resource(name="accountService")
    private AccountService accountService;

    @Test
    public void demo4(){
        accountService.transfer("aaa", "bbb", 200d);
    }
}
时间: 2024-10-25 17:11:29

spring事物管理--声明式(AspectJ)注解实现 (推荐使用)的相关文章

spring事物管理--声明式(AspectJ)(推荐使用)

1.表结构及数据 2.需引入的jar包: 3.业务层(Service).持久层(Dao)接口与实现类 Service接口: //转账案例业务层接口 public interface AccountService { /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out,String in,Double money); } Service实现类: //转账案例

Spring事物管理简介 (转)

一.事物1.什么是事物 事物指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败 2.事物的特性 原子性:事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生 一致性:事物前后数据的完整性必须保持一致 隔离性:指多个用户并发访问数据库时,一个用户的事物不能被其他用户的事物所干扰,多个并发事物之间数据要相互隔离. 持久性:一个事物一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响. 二.事物的API介绍 Spring事物管理高层抽象主要包括

集成Spring事物管理

单独使用MyBatis对事物进行管理 前面MyBatis的文章有写过相关内容,这里继续写一个最简单的Demo,算是复习一下之前MyBatis的内容吧,先是建表,建立一个简单的Student表: create table student ( student_id int auto_increment, student_name varchar(20) not null, primary key(student_id) ) 建立实体类Student.java: public class Studen

MyBatis6:MyBatis集成Spring事物管理(下篇)

前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基础上稍微做一点点的进阶:多数据的事物处理.文章内容主要包含两方面: 1.单表多数据的事物处理 2.多库/多表多数据的事物处理 这两种都是企业级开发中常见的需求,有一定的类似,在处理的方法与技巧上又各有不同,在进入文章前,先做一些准备工作,因为后面会用到多表的插入事物管理,前面的文章建立了一个Student相关

spring 事物管理特性

采用编程式事务1. getCurrentSession()与openSession()的区别? * 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会 * 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession创建的session必须手动关闭 2.使用getCurrentSession()需要在hibernate.cfg.xm

Spring中的事物管理,用 @Transactional 注解声明式地管理事务

事物: 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四个关键属性: 原子性:事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用. 一致性:一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中. 隔离性:可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来,

8.Spring整合Hibernate_2_声明式的事务管理(Annotation的方式)

声明式的事务管理(AOP的主要用途之一) (Annotation的方式) 1.加入annotation.xsd 2.加入txManager bean 3.<tx:annotation-driven 1 <tx:annotation-driven transaction-manager="txManager"/> 2 <bean id="txManager" class="org.springframework.orm.hiberna

9.Spring整合Hibernate_2_声明式的事务管理(Xml的方式)

使用xml的方式进行声明式的事务管理 推荐使用xml的方式,因为可以同时为多个方法进行声明 1 <!-- 开启Spring中的事务管理(声明式的事务管理) xml--> 2 3 <!-- 不管是通过 xml 还是注解的方式 来进行声明式的事务管理,都需要 加载TransactionManager或 DataSouce 4 因为 事务是与是与数据库相关的,需要数据库一些配置信息 5 --> 6 <bean id="txManager" class="

Spring入门第4天--Spring事物管理

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.24 lutianfei none 事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性:ACID 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致. 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 持久性:一旦结束,数据就永久的保存到数据库. 如果不考虑隔离性: 脏读:一个事务读到另一个事务未提交数据 不可重复读:一个事务读到另一个事务已经提交数据(update)导致一个事