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. javascript --- 事件托付
  2. 过年期间:这个 GitHub 项目你必能用到
  3. 字符串匹配的KMP算法和C语言代码,不需要思考就能理解
  4. xp 远程计算机需要远程验证登陆,xp远程桌面登陆需要身份验证问题解决
  5. redis事务原理,使用,详解
  6. oppoJava面试题,腾讯社招三面多久联系
  7. PHP基本语法(实例)
  8. Flash和margue字幕滚动效果
  9. ReactNative绑定函数中的this
  10. 编码速度非常慢_有BUG?MySQL中的 utf8 居然并不是真正的UTF-8编码?
  11. 前端实用小工具(URL参数截取、JSON判断、数据类型检测、版本号对比等)
  12. yii2 Rbac使用yii命令一键建表
  13. jq获取页面url后边带的参数
  14. DependencyProperty
  15. 刀片系统服务器优点,刀片服务器是什么?介绍ibm刀片服务器优点
  16. 权威服务器和域名注册,域名服务器简介
  17. 考上985的研究生了!
  18. 关于大学生睡眠时间及质量的问卷调查
  19. 开源API文档管理系统
  20. 华为防火墙nat技术之服务器映射

热门文章

  1. iis配置绑定二级域名的问题
  2. golang 二维切片
  3. P1628 合并序列
  4. hdu 4468 spy 极其精彩的一道kmp灵活运用题
  5. Spring-配置bean的方法(工厂方法和Factorybean)【转】
  6. sql server服务看不到,显示为远程过程调用在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误10061...
  7. AttachThreadInput
  8. Eular 函数模板
  9. ubuntu12.04安装lamp的简单lamp
  10. 自定义ORM系列(三)工具雏形及基本用法