UsbSell.java

package com.dym.service;//目标接口
public interface UsbSell {float sell(int amount);void print();
}

UsbKingFactory.java

package com.dym.factory;import com.dym.service.UsbSell;//目标类
public class UsbKingFactory implements UsbSell {@Overridepublic float sell(int amount) {//目标方法System.out.println("目标类中,执行sell目标方法");return 85.0f;}@Overridepublic void print() {}
}

MySellHandler.java

package com.dym.handler;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;//必须实现InvocationHandler接口,完成代理类要做的功能(1.调用目标方法,2.功能增强)
public class MySellHandler implements InvocationHandler {private Object target = null;//动态代理:目标对象是活动的,不是固定的,需要传入进来。//传入是谁,就给谁创建代理。public MySellHandler(Object target) {//给目标对象赋值this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object res  = null;//向厂家发送订单,告诉厂家,我买了u盘,厂家发货//float price = factory.sell(amount); //厂家的价格。res =  method.invoke(target,args); //执行目标方法//商家 需要加价, 也就是代理要增加价格。//price = price + 25; //增强功能,代理类在完成目标类方法调用后,增强了功能。if( res != null ){Float price = (Float)res;price = price + 25;res = price;}//在目标类的方法调用后,你做的其它功能,都是增强的意思。System.out.println("淘宝商家,给你返一个优惠券,或者红包");//记录数据库//增加的价格return res;}
}

MainShop.java

package com.dym;import com.dym.factory.UsbKingFactory;
import com.dym.handler.MySellHandler;
import com.dym.service.UsbSell;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;public class MainShop {public static void main(String[] args) {//创建代理对象,使用Proxy//1. 创建目标对象// UsbKingFacotry  factory = new UsbKingFactory();UsbSell factory = new UsbKingFactory();//2.创建InvocationHandler对象InvocationHandler handler = new MySellHandler(factory);//3.创建代理对象UsbSell proxy = (UsbSell) Proxy.newProxyInstance(factory.getClass().getClassLoader(),factory.getClass().getInterfaces(),handler);//com.sun.proxy.$Proxy0 : 这是jdk动态代理创建的对象类型。System.out.println("proxy:"+proxy.getClass().getName());//4.通过代理执行方法float price = proxy.sell(1);System.out.println("通过动态代理对象,调用方法:"+price);}
}

动态代理(JDK的动态代理)相关推荐

  1. cglib动态代理jar包_代理模式详解:静态代理+JDK/CGLIB 动态代理实战

    1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...

  2. 代理详解 静态代理+JDK/CGLIB 动态代理实战

    1. 代理模式 代理模式是一种比较好理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对 ...

  3. java动态代理(JDK和cglib)详解

    JAVA的动态代理  代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委 ...

  4. 使用 cglib_java动态代理(JDK和CGLIB原理解析与使用)

    CGLIB的动态代理 原理 代理为控制要访问的目标对象提供了一种途径.当访问对象时,它引入了一个间接的层.JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理.JDK的动态代理用起 ...

  5. jdk动态代理与cglib动态代理例子

    1.JAVA的动态代理特征:特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象 ...

  6. 动态代理,动态代理设计模式 ,JDK动态代理,cglib动态代理

    为什么80%的码农都做不了架构师?>>>    一:在看此篇代码示例前,先看静态代理, 链接地址:http://my.oschina.net/dyyweb/blog/656760   ...

  7. 4、MyBatis + Log4j日志查看Sql参数、结果集元数据、Mapper代理开发、JDK的动态代理与CGLib代理

    文章目录 MyBatis优化开发 日志 ResultSet如何转换为Java对象 数据库元数据 结果集元数据 Fastjson 基于MyBatis的DAO开发(传统) 推荐mapper代理开发 JDK ...

  8. Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)

    Java之代理... 1 一.         概念... 1 二.         jdk的静态代理... 1 三.         jdk动态代理... 4 四.         cglib 动态 ...

  9. 【Spring】Spring中AOP解析 上 两种动态代理方式与ProxyFactory代理工厂

    1.两种动态代理方式演示 1.1 JDK动态代理 JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程.要求被代理类必须实现一个接口 . 如下案 ...

  10. java设计模式--工厂模式、静态代理模式、动态代理模式

    工厂模式 代码实现: 步骤一:创建一个接口 Car.java package FactoryMode;public interface Car {public void run(); } 步骤二:创建 ...

最新文章

  1. java request get json数据_Java中,获取request中json数据
  2. SpringCloud运行时刷新数据源相关配置
  3. IOS学习笔记七之KVC和Key路径
  4. Spring+Hibernate+Atomikos集成构建JTA的分布式事务--解决多数据源跨库事务
  5. gridview 强制过长数据进行换行
  6. 为facebook添加html/iframe页面 Create A Facebook Landing Page (Static HTML / iFrame)
  7. springboot实体映射到数据库_SpringBoot 操作 ElasticSearch 详解
  8. 自定义列_如何对Pandas DataFrame进行自定义排序
  9. 程序员都该懂的 UML 规范!
  10. 启动级别:init 0,1,2,3,4,5,6
  11. Oracle 数据块损坏与恢复具体解释
  12. 【修复版】ONE兔3.0版本社交社区交友婚恋视频即时通讯双端APP原生源码
  13. qt打包安装程序需要先安装其他驱动或者依赖库的解决方案(Setup Factory)
  14. 不能创建对象qmdispatch_activex部件不能创建对象怎么解决
  15. 幽灵行动:NVIDIA 310M显卡完美超频直逼中高端显卡
  16. word怎么在下一页添加表头_word表格在换页时能否自动在新换页上带上表头,如何设置...
  17. PS如何修改图片日期或者其他文本内容
  18. 小白算法练习 lanqiao SPFA+vector 模板
  19. centos7安装xterm_CentOS 7使用x-manager中Xstart最新工具报缺少xterm包错误
  20. oracle19c集群重启,由重启引起的Oracle RAC节点宕机分析及追根溯源

热门文章

  1. Luogu3375 【模板】KMP字符串匹配
  2. 腾讯地图和百度地图的PHP相互转换
  3. python爬虫用到的一些东西
  4. 【NLP_Stanford课堂】正则表达式
  5. UAF学习之Adobe reader CVE-2013-3346
  6. Android内置第三方输入法
  7. 高通android开源代码下载
  8. Android 系统当中各种尺寸单位的定义及使用
  9. 虚拟机安装Ubuntu14.04打开FireFox提示Server not found
  10. Android4.2以及最新SDK的尝鲜使用