阶段3 2.Spring_07.银行转账案例_10 使用动态代理实现事务控制
回到事物的案例中

我们现在希望用代码比较精简的这个AccountServiceImpl这个类。而不是一堆事物的AccountServiceImpl_OLD这个类

新建BeanFactory类

AccountService需要通过spring注入的方式。所以这里提供了set方法

代理谁就写的类加载器。


复制这里的代码

复制过来,然后进行修改

这里有很多红色报错的地方。那就是tsManager这个对象。这就需要在上面定义。
把AccountServiceImpl_OLD中定义的tsManager和生成的set方法都复制过来


accountService需要是一个最终的对象。所以这里用final来修饰

这样这个代理对象就创建完了。同时也加上了事物

这样执行AccountServiceImpl这个被代理对象里面的任何方法时,都会经过代理对象。

被代理对象AccountServiceImpl内就不再需要tsManager。因为都由代理对象来控制了。

完成以上。事务控制和业务层的方法就进行了真正的分离
bean.xml的修改
accountService中注入事务管理就不再需要了。

配置BeanFactory
beanfacoty中注入Service

再注入事物管理器

配置代理的Service

之前的这里的accountService就是一个普通的Service对象,里面没有任何带事物支持的

这里我们不能再配置AccountServiceImpl这个类了。而是要用我们之前对象创建三种方式之一的实例工厂,也就是factory-bean

这样我们就出现了两个类型相同的。这两都实现了IAccountService接口,一个是动态代理实现的,一个本身就是实现类

那么我们测试的时候,用Autowired这种方式注入就不行了。因为这个再注入的时候二选一,选不出来

所以就需要用Qulifier。我们这里就用代理类的Service

在这里打印一句话

测试使用动态代码实现事务控制
出了一场,金额都没有变化





配置变的很繁琐。接下来就需要Spring中的AOP
阶段3 2.Spring_07.银行转账案例_10 使用动态代理实现事务控制的更多相关文章
- 阶段3 2.Spring_07.银行转账案例_1 今日课程内容介绍
1.完善我们的account案例 2.分析案例中问题 3.回顾之前讲过的一个技术:动态代理 4.动态代理另一种实现方式 5.解决案例中的问题 6.AOP的概念 7.spring中的AOP相关术语 8. ...
- 阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
代理一个普通的java类 导入cglib的包 它还有一个asm的依赖.会自动加进来 创建cglib的文件夹.把proxy里面的Client和Producer复制到cglib文件夹 Producer不实 ...
- 阶段3 2.Spring_07.银行转账案例_8 基于接口的动态代理回顾
创建 Producer 生产者的类 创建标准.这标准就是接口 创建消费者的类 以前的方式,客户直接找生产厂家 代理商出现以后,怎么去联系代理商 动态代理 第一个参数是ClassLoader 第二个参数 ...
- 阶段3 2.Spring_07.银行转账案例_7 代理的分析
新建项目 实现动态代理. 动态代理的概念 买电脑找代理商 代理的出现 解决了生产厂家的一些问题 需要java中的动态代理机制
- 阶段3 2.Spring_07.银行转账案例_6 测试转账并分析案例中的问题
转账回滚这里把异常打印出来.AccountServiceTest.java 把数据库的金额现在都改成1000块 运行测试方法 这里已经报错了. 刷新数据库内的数据.这样我们事物就控制成功了. 事物控制 ...
- 阶段3 2.Spring_07.银行转账案例_5 编写业务层和持久层事务控制代码并配置spring的ioc
Service中就需要用到 TransactionManager中的方法.提供set方法等着spring注入 这里面所有的操作都可以加上事物控制 其他的方法都是相同的操作 这里没有返回结果 转账的方法 ...
- 阶段3 2.Spring_07.银行转账案例_4 编写事务管理工具类并分析连接和线程解绑
事务管理工具类 首先需要有connection.并且是当前线程上的connection.声明connectionUtils.提供set方法等着spring来注入 有异常需要放在事务里面 close关闭 ...
- 阶段3 2.Spring_07.银行转账案例_3 分析事务的问题并编写ConnectionUtils
不是没有事务造成的 这样相当于有四个connection 每一个都有自己独立的事物 每一个自己成功就提交事务. 已经提交的就执行结束.没有提交的就报异常 让这些操作使用同一个connection 事物 ...
- 阶段3 2.Spring_07.银行转账案例_2 案例中添加转账方法并演示事务问题
使用xmlioc这个项目进行完善. 创建一个新的工程把之前的代码都复制过来. 复制pom.xml内的依赖项 java下的com包复制过来. 配置文件复制过来 测试类固执过来 内容进行删减 测试类的方法 ...
随机推荐
- 标准C语言(10)
指针数组的每个存储区是一个指针类型的存储区,字符指针数组包含多个字符类型的指针,每个字符类型指针可以代表一个字符串.字符指针数组可以用来代表多个相关字符串,二维字符数组也可以用来记录多个相关字符串,通 ...
- 标准C语言(9)
C语言里所有文字信息必须记录在一组连续的字符类型存储区里所有文字信息必须以字符'\0'做结尾,这个字符的ASCII码就是0符合以上两个特征的内容叫字符串,它们可以用来在程序里记录文字信息.字符串里'\ ...
- 牛客练习赛46 A 华华教奕奕写几何 (简单数学)
链接:https://ac.nowcoder.com/acm/contest/894/A 来源:牛客网 华华教奕奕写几何 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...
- 详解thinkphp+redis+队列的实现代码
1,安装Redis,根据自己的PHP版本安装对应的redis扩展(此步骤简单的描述一下) 1.1,安装 php_igbinary.dll,php_redis.dll扩展此处需要注意你的php版本如图: ...
- session共享原理以及PHP 实现多网站共享用户SESSION 数据解决方案
参考自: http://www.cnblogs.com/qulinke/articles/6003049.html https://segmentfault.com/q/101000000578847 ...
- zabbix的简单操作(proxy代理分布式监控)
分布式监控 作用:分担压力,减轻负载,多机房监控 通过zabbix proxy的搭建,zabbix server可以远程从proxy获取到数据,这里的环境相当于zabbix server具有一个公网i ...
- 前端杂谈: Attribute VS Property
前端杂谈: Attribute VS Property 第一个问题: 什么是 attribute & 什么是 property ? attribute 是我们在 html 代码中经常看到的键值 ...
- 利用java8新特性,用简洁高效的代码来实现一些数据处理
定义1个Apple对象: public class Apple { private Integer id; private String name; private BigDecim ...
- radio(单选框)/checkbox(复选框) 美化
由于某种原因,可能需要对单选框(radio)或复选框(checkbox)进行美化,那么直接修改样式是行不通,要实现就需要添加js,以下js依赖于jquery radio.js: function ra ...
- c# 判断某个类是否实现某个接口
typeof(IFoo).IsAssignableFrom(bar.GetType()); typeof(IFoo).IsAssignableFrom(typeof(BarClass));