博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring事物管理--声明式(AspectJ)(推荐使用)
阅读量:4685 次
发布时间:2019-06-09

本文共 2970 字,大约阅读时间需要 9 分钟。

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实现类:

//转账案例业务层实现类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);    }}

 

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);    }}

 

4、applicationContext.xml配置文件

     

        isolation   :事物隔离级别

        read-only   :只读
        rollback-for :发生哪些异常回滚
        no-rollback-for :发生哪些异常不回滚
        timeout :过期信息
        -->

注意:

(1)、Adivisor是一种特殊的Aspect,Advisor代表spring中的Aspect 

(2)、区别:advisor只持有一个Pointcut和一个advice,而aspect可以多个pointcut和多个advice

(3)、无论使用哪种方式实现spring的事物管理,在applicationContext.xml文件中都必须配置事务管理器,并将连接池设置为管理器的属性

 

5、测试类:

//spring声明式事物管理的方式二的测试类:基于AspectJ的XML配置@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext3.xml")public class SpringDemo3 {    //需注入业务层代理对象    @Resource(name="accountService")    private AccountService accountService;        @Test    public void demo3(){        accountService.transfer("aaa", "bbb", 200d);    }}

 

转载于:https://www.cnblogs.com/xl118/p/6793337.html

你可能感兴趣的文章
电脑上报缺失msvcr100d.dll 处理(转)
查看>>
Java 开发中的对象拷贝
查看>>
创建型模式的特点和分类
查看>>
Python学习笔记——基础篇【第五周】——常用模块学习
查看>>
CentOS7.3编译安装Nginx设置开机启动
查看>>
个数是如何用大数据做行为预测的?
查看>>
孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6
查看>>
Linux基础命令---chown
查看>>
一种解决h5页面背景音乐不能自动播放的方案
查看>>
R语言统计字符串的字符数ncahr函数
查看>>
golang--Redis最佳的Go语言驱动
查看>>
Python socket编程
查看>>
js常用方法集锦
查看>>
redis 中文文档
查看>>
sqli-lab(13)
查看>>
Flash Builder升级debug player方式
查看>>
Maven 与 IntelliJ IDEA 的完美结合<转>
查看>>
python 计算器
查看>>
JZOJ 2019.1.27——2019.1.30比赛小结
查看>>
端午节放假
查看>>