阶段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包复制过来. 配置文件复制过来 测试类固执过来 内容进行删减 测试类的方法 ...
随机推荐
- 二,kubernetes集群的安装初始化
目录 部署 集群架构示意图 部署环境 kubernetes集群部署步骤 基础环境 基础配置 安装基础组件 配置yum源 安装组件 初始化 master 设置docker和kubelet为自启动(nod ...
- CentOS6.5安装zabbix3.0
Server端 搭建LAMP(Linux+Apache+Mysql+PHP)环境 1.安装MySQL #安装地址:https://dev.mysql.com/downloads/repo/yum/ y ...
- 一次NaN引发的npe
# 先上代码 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class QQ { p ...
- Mongodb操作-更新操作符
1.$inc 用法:{$inc:{field:value}} 作用:对一个数字字段的某个field增加value 示例:将name为chenzhou的学生的age增加5 > db.student ...
- php-fpm搭建及加固
php-fpm安装 nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端. nginx一般是把请求发fastcgi管理进程 ...
- 高性能mysql 第5章 创建高可用的索引
b-tree索引 一定程度上说,mysql只有b-tree索引.他没有bitmap索引.还有一个叫hash索引的,只在Memory存储引擎中才有. b-tree索引跟oracle中的大同小异. mys ...
- BZOJ4641 基因改造[KMP]
这道题以前好像模拟的时候做过,当时不会做,于是用hash水过去了.. 正解是KMP,还是用当前字符与上一次相同字符位置的距离表示数组,于是数值相等时就代表相似.第一次出现用INF代替. 然后要匹配有多 ...
- window下,nodejs安装http-server,并开启HTTP服务器
1.下载nodejs 官方下载地址:https://nodejs.org/en/ 2.在cmd命令中,输入node -v 输入出版本号,代表安装成功. 3.输入 npm install http-s ...
- springboot 开启缓存
Caching Data with Spring This guide walks you through the process of enabling caching on a Spring ma ...
- SQL中Charindex和Oracle中对应的函数Instr
转:http://blog.csdn.net/zhuyu19911016520/article/details/8568640 sql :charindex('字符串',字段)>0 charin ...