我们定义了两个实体类及对应的表:
public class Account {
private Integer aid;
private String aname;
private Integer balance;
public class Stock {
private Integer sid;
private String sname;
private Integer count;
定义了两个dao接口及其实现类,主要负责银行账户开户和增减钱、股票账户开户和增减股份。
stock
account
定义了个service类作具体负责(银行、股票开户和购买操作)我们这里具体来看购买操作:
定义了个异常类:
一、事务管理必要性分析:假如在购买股票过程中出现异常,就会导致银行账户钱减少,而股票账户数量没有增加,这在实际应用中是不允许操作的,为此我们将银行账户和股票账户绑定在一起,让他们成为一根绳上的蚂蚱,一旦出现异常,成功的那个必须要作回滚。
这就是事务的原子性,而事务处于项目的dao层,而我们的购买操作处在业务层,那就就需要将事务从dao层提升至service层。
为此,spring对事务的关联提供了三种方式:
一、AspectJ对事务的管理(重点,最为常用的方法):
二、使用注解方式:
首先在配置文件添加如下配置:
在service类里添加注释:
三、使用Spring事务代理工厂Bean管理事务(不推荐)
不推荐的原因:
会导致代码冗余。
不能直接访问目标类,不符合逻辑。
这种方式的测试类getBean的是我们定义的工厂serviceFactory,所以不符合逻辑。