回到事物的案例中

我们现在希望用代码比较精简的这个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

转载于:https://www.cnblogs.com/wangjunwei/p/11354421.html

阶段3 2.Spring_07.银行转账案例_10 使用动态代理实现事务控制相关推荐

  1. Spring-学习笔记07【银行转账案例】

    Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...

  2. Spring之银行转账案例(七)

    文章目录 (一)案例中添加转账方法并演示事务问题 (二)分析事务的问题并编写ConnectionUtils (三)编写事务管理工具类并分析连接和线程解绑 (四)编写业务层和持久层事务控制代码并配置sp ...

  3. 通过AOP和IOC改造银行转账案例

    1 银行转账案例界面 2 表结构 3 代码调用关系 4 关键代码 (1)TransferServlet @WebServlet(name = "transferServlet", ...

  4. Spring AOPIOC初步引入-银行转账案例改造

    Spring 概述 1.1Spring 简介 Spring 官⽅⽹址:http://spring.io/ Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP ...

  5. springboot利用注解开启事务(银行转账案例)

    注意点: 1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  6. 【Spring】通过动态代理改进银行转账事务控制

    前情 银行转账的案例中,通过给业务层实现类中每个方法中通过事务控制方法添加事务控制,保证每个方法在执行时只有一个数据库连接,通过事务保证整个方法要成功全部成功,要失败都失败. 问题 业务层实现类添加事 ...

  7. 动态代理案例1:运用Proxy动态代理来增强方法

    动态代理案例1: /*要求:运用Proxy动态代理来增强方法 题目:     1.定义接口Fruit,其中有addFruit方法     2.定义实现类FruitImpl,实现Fruit接口     ...

  8. 学习笔记:Zookeeper 应用案例(上下线动态感知)

    1.Zookeeper 应用案例(上下线动态感知) 8.1 案例1--服务器上下线动态感知 8.1.1 需求描述 某分布式系统中,主节点可以有多台,可以动态上下线 任意一台客户端都能实时感知到主节点服 ...

  9. 【JavaWeb】JDBC的基本操作和事务控制+登录和转账案例

    1 JDBC操作数据库 1.1 连接数据库 首先导入jar包到lib public class JdbcDemo1 {public static void main(String[] args) th ...

  10. 什么是动态代理?动态代理有哪些应用?如何编写动态代理案例

    什么是动态代理? 当我们需要给某个类或者接口中的方法添加一些额外的功能比如日志.事务的时候,可以通过创建一个代理类来实现这些功能:该代理类既包含了原有类的完整功能,同时在这些功能的基础上添加了其他的逻 ...

最新文章

  1. 明确了!导师再也不能让研究生干这种事!
  2. jbpm人工终止的开发
  3. 2.0版本的日历控件在ie8显示不全的解决办法
  4. 默认轮播,鼠标移入停止,移出继续
  5. 在制造业中推进机器人技术的五种方法
  6. Java8学习笔记(1) -- 从函数式接口说起
  7. C#设计模式之2-抽象工厂模式
  8. php 取整函数 ceil floor round intval 随笔
  9. 学习hadoop需要什么基础
  10. 解决 IDEA 中src下xml等资源文件无法读取的问题
  11. python实现的、带GUI界面电影票房数据可视化程序
  12. 1个app的完整测试用例_APP测试流程
  13. 家庭版联想台式计算机,联想台式机预装win10家庭版升级win10专业版方法教程
  14. kd树的根节点_多维空间分割树--KD树
  15. 学习笔记 --- DM9000网卡原理与基地址设置
  16. 样本相关系数公式的一点化简方法
  17. 达梦 DCA 培训总结
  18. 使用vmware+centos7+openfiler搭建达梦DSC两节点集群
  19. 2021-11-24【数据结构练习题】【二叉搜索树的插入删除】
  20. 无法加入域--隶属于域、工作组选项为灰色

热门文章

  1. python调用jsonrpc接口_python使用grpc调用rpc接口
  2. jupyter notebook python插件_Python文学化编程-Jupyter notebook使用和插件拓展
  3. python和pytorch关系_pytorch 模拟关系拟合——回归实例
  4. 拓端tecdat|r语言ggplot2误差棒图快速指南
  5. To use CUDA with multiprocessing, you must use the ‘spawn‘ start method
  6. 大疆DJI Thermal SDK Linux libdirp.so: cannot open shared object file: No such file or directory
  7. DeepFake技术--DeepFakes 概述(一)(二)
  8. 判别式模型 vs. 生成式模型
  9. 如何在 NVIDIA GPU、CUDA 和 cuDNN 中使用 OpenCV 的“dnn”模块
  10. pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at line xxx