【自学java笔记#第四十八天#】Spring day03 动态代理和AOP配置

一、解决事务的不一致性问题

案例:从1账户,转100块到2账户,然后更新两个账户。

public void transfer(String sourceName, String targetName, Float money) {
        System.out.println("transfer--------");
            //2.1根据名称查询转出账户
            Account source=accountDao.findAccountName(sourceName);
            //2.2根据名称查询转入账户
            Account target=accountDao.findAccountName(targetName);
            //2.3转出账户减钱
            source.setMoney(source.getMoney()-money);
            //2.4转入账户加钱
            target.setMoney(target.getMoney()+money);
            //2.5更新转出账户
            accountDao.updateAccount(source);
            //2.6更新转入账户
            accountDao.updateAccount(target);

这段代码中,一共和数据库进行了4次交互,也就是说创建了4次连接。

所以每一个连接都有自己的独立事务,最后数据库里的数据有可能不是我们预期的。

因此面对这样的事务不一致性问题,最好是只用一次连接,且这次连接里也只有一个控制事务的对象。

这里的做法是,利用ThreadLocal对象,将Connection对象与当前线程绑定,且采用动态代理技术:

 

 二、动态代理技术

 

 三、AOP的基础概念

 

 四、基于XML的AOP配置

 

 五、基于注解的AOP配置

 

posted @ 2020-05-20 11:39  一只奶鹿  阅读(122)  评论(0)    收藏  举报