创建 Producer 生产者的类


创建标准。这标准就是接口


创建消费者的类

以前的方式,客户直接找生产厂家

代理商出现以后,怎么去联系代理商

动态代理


第一个参数是ClassLoader 第二个参数是interface是字节码类型,第三个是InvocationHandler是一个接口

代理producer就这么写。代理谁就写谁的getClass().getClassLoader()

代理谁,就是谁的getClass().getInterfaces()


s时而用谁写,所以这里我们new一个InvocationHandler()方法


这里我们只需要干一件事就是:mehtod.invoke(); 
Objetc第一个参数表示谁的方法。肯定不是被代理对象的方法。

匿名内部类访问外部成员变量时。外部成员要求是最终的,所以这里用final来修饰

这样并没有提供增强的代码

消费者买电脑给了1万块。但是代理商要2千块的提成。生产厂家只能拿到8千块

测试


0.8后面加个f。money是float类型的

消费者拿出1万块购买电脑。经销商分走了2千。 生产厂家得到了8千。

出现问题的原因是这里看不成是一个float类型了。

对于生产厂家来说,。他不管。他只管拿到钱 就可以把电脑给你。这个给就是贵经销商。经销商在卖这个产品的时候。他肯定挣钱。

我们并没有在生产厂家的这个saleProduct方法上做任何的修改。但是对这个方法已经做了增强。这就是之前讲过的 基于接口的动态代理。
但是他也有一个问题。如果我们的类不实现任何接口的时候。他是不能用的

这把接口的实现代码注释掉。

执行就会出现代理异常

阶段3 2.Spring_07.银行转账案例_8 基于接口的动态代理回顾的更多相关文章

  1. 阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理

    代理一个普通的java类 导入cglib的包 它还有一个asm的依赖.会自动加进来 创建cglib的文件夹.把proxy里面的Client和Producer复制到cglib文件夹 Producer不实 ...

  2. TZ_05_Spring_Proxy基于接口的动态代理和基于类的动态代理

    代理:为了增强方法在不添加代码的情况下 1.Proxy基于接口的动态代理 /** * 模拟一个消费者 * @author Administrator * */ public class Client ...

  3. 阶段3 2.Spring_07.银行转账案例_1 今日课程内容介绍

    1.完善我们的account案例 2.分析案例中问题 3.回顾之前讲过的一个技术:动态代理 4.动态代理另一种实现方式 5.解决案例中的问题 6.AOP的概念 7.spring中的AOP相关术语 8. ...

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

    回到事物的案例中 我们现在希望用代码比较精简的这个AccountServiceImpl这个类.而不是一堆事物的AccountServiceImpl_OLD这个类 新建BeanFactory类 Acco ...

  5. 阶段3 2.Spring_07.银行转账案例_7 代理的分析

    新建项目 实现动态代理. 动态代理的概念 买电脑找代理商 代理的出现 解决了生产厂家的一些问题 需要java中的动态代理机制

  6. 阶段3 2.Spring_07.银行转账案例_6 测试转账并分析案例中的问题

    转账回滚这里把异常打印出来.AccountServiceTest.java 把数据库的金额现在都改成1000块 运行测试方法 这里已经报错了. 刷新数据库内的数据.这样我们事物就控制成功了. 事物控制 ...

  7. 阶段3 2.Spring_07.银行转账案例_5 编写业务层和持久层事务控制代码并配置spring的ioc

    Service中就需要用到 TransactionManager中的方法.提供set方法等着spring注入 这里面所有的操作都可以加上事物控制 其他的方法都是相同的操作 这里没有返回结果 转账的方法 ...

  8. 阶段3 2.Spring_07.银行转账案例_4 编写事务管理工具类并分析连接和线程解绑

    事务管理工具类 首先需要有connection.并且是当前线程上的connection.声明connectionUtils.提供set方法等着spring来注入 有异常需要放在事务里面 close关闭 ...

  9. 阶段3 2.Spring_07.银行转账案例_3 分析事务的问题并编写ConnectionUtils

    不是没有事务造成的 这样相当于有四个connection 每一个都有自己独立的事物 每一个自己成功就提交事务. 已经提交的就执行结束.没有提交的就报异常 让这些操作使用同一个connection 事物 ...

随机推荐

  1. sqlalchemy 中的get_or_404

  2. 清北学堂dp图论营游记day3

    .状态压缩dp: 对于这个我们引入二进制状态压缩,因为任何一个数都可以二进制表示,而其二进制表示上每一位都可以表示当前位置是否有元素,这就构成了状态压缩. 对于这个题,上下行&一下就行. 状压 ...

  3. java调用js函数

    问题:js函数可能有多个,之间有相互调用关系,有jquery jar包 org.mozilla.javascript-1.7.2 js   envjs-1.2.js java代码 import jav ...

  4. JavaWEB开发05_Bootstrap

    上次课内容:什么JQ : write less do more 写更少的代码,做更多的事情 javascript函数库 基本选择器: ​ ID选择器: #ID名称 ​ 类选择器: .类名 ​ 元素选择 ...

  5. :last-child的坑-CSS3选择器

    CSS3选择器之:last-child - Eric 真实经历 最近开发项目的时候发现了一个这么多年忽略的问题,和大家分享一下.项目使用的是Antd组件库,有一个搜索框是这样的: 为了保证下拉框的内容 ...

  6. shell中的控制流结构

    shell中的控制流结构 1.if...then..else..fi语句 2.case语句 3.for循环 4.until 语句 5.while循环 6.break控制 7.continue 控制 1 ...

  7. 剑指Offer-快速排序

    剑指Offer上的快速排序的Partition函数与我在数据结构书上学到的不一样,因此就想要探索下这两种不同的处理方式. 1.基本思想 快速排序的基本思想是基于分治法.在待排序表L[1...n]中任取 ...

  8. d3 词云使用

    D3-Cloud是一个开源的词云实现,基于D3.js,使用HTML5 Canvas绘制输出,因为采用异步的方式处理,所以表现性能良好. 项目主页:https://www.jasondavies.com ...

  9. setAttribute()方法和 getAttribute() 方法

    一.setAttribute() 方法 setAttribute() 方法为一个或一组元素添加指定的属性,并且为其赋指定的值.(主要针对自定义属性) 如果这个属性已经存在,仅仅设置或是修改属性值. 浏 ...

  10. Cookie相关工具方法

    /** * InputStream转化为byte[]数组 * @param input * @return * @throws IOException */ public static byte[] ...