spring 控制事务的代码 笔记

39 篇文章 0 订阅
13 篇文章 0 订阅

用spring 操作 账户转账数据

AccountService接口

public interface AccountService {

    /**
     * 转账操作
     * @param outName     出账用户名
     * @param inName      入账用户名
     * @param money       转账金额
     */
    public void transfer(String outName, String inName, Double money);

}

用service层实现类使用事务管理操作

 private AccountDao accountDao;

    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }

    //注入数据源对象
    private DataSource dataSource;
    public void setDataSource(DataSource dataSource){
        this.dataSource = dataSource;
    }


    public void transfer(String outName, String inName, Integer money) {
         //开启事务
        PlatformTransactionManager ptm = new DataSourceTransactionManager(dataSource);
        //事务定义
        DefaultTransactionDefinition td = new DefaultTransactionDefinition();
       //事务状态
        TransactionStatus ts = ptm.getTransaction(td);

        //调用dao层转入资金方法
        accountDao.inMoney(outName,money);
        //调用daoceng转出资金方法
        accountDao.outMoney(inName,money);

        //提交事务
        ptm.commit(ts);

    }

DataSourceTransactionManager(dataSource);这是开启事务的,他需要个资源才能开启事务,这个资源用 dataSource 对象接受

但要早spring配置文件中
注入service层的bean标签里
将这个 dataSource 对象 与 dao层实现对象一起注入进去

<!--注入service实现类到bean中,-->
    <!--同时将service实现类中声明的对象名称一起注入到这个配置中-->
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"/>
        <!--注入接受连接的变量-->
        <property name="dataSource" ref="dataSource"/>
        <!--<property name="dataSource" ref="dataSource"/>-->
    </bean>

DefaultTransactionDefinition();
还需要创建这个事务基本信息对象
也就是事务定义的对象
作为 参数

在ptm.getTransaction(td);
获取事务状态对象后 TransactionStatus ts
才写具体处理数据的代码
最后 用 PlatformTransactionManager ptm 事务管理对象
将 事务提交 ptm.commit(ts);

上面用的是 PlatformTransactionManager对象开启事务的
用DataSourceTransactionManager对象 来开启事务
就得用 setDataSource(dataSource);来
将声明的资源对象通过 set方法设置进去

public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        AccountService accountService = (AccountService) ctx.getBean("accountService");
        accountService.transfer("Jock1","Jock2",100D);
    }
}

要将这个spring框架的代码运行起来,必须用一个实体类来写主方法,将配置对象创建出来,在spring的Bean中将通过配置文件注入的AccountService获取出来,调用它里面的方法。

这就是在配置文件注入的资源,要使用是就要创建ApplicationContext对象,用getBean 获取bean的方法 传入一个资源的名称,这样就能找到这个bean中需要使用的资源

这个资源创建出来后是通过配置文件注入到 spring 中的bean
bean是 spring IOC里面 的一种 容器,主要存储的是从外部通过依赖注入 的资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

普希托夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值