动态代理(JDK的动态代理)
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的动态代理)相关推荐
- cglib动态代理jar包_代理模式详解:静态代理+JDK/CGLIB 动态代理实战
1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...
- 代理详解 静态代理+JDK/CGLIB 动态代理实战
1. 代理模式 代理模式是一种比较好理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对 ...
- java动态代理(JDK和cglib)详解
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委 ...
- 使用 cglib_java动态代理(JDK和CGLIB原理解析与使用)
CGLIB的动态代理 原理 代理为控制要访问的目标对象提供了一种途径.当访问对象时,它引入了一个间接的层.JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理.JDK的动态代理用起 ...
- jdk动态代理与cglib动态代理例子
1.JAVA的动态代理特征:特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象 ...
- 动态代理,动态代理设计模式 ,JDK动态代理,cglib动态代理
为什么80%的码农都做不了架构师?>>> 一:在看此篇代码示例前,先看静态代理, 链接地址:http://my.oschina.net/dyyweb/blog/656760 ...
- 4、MyBatis + Log4j日志查看Sql参数、结果集元数据、Mapper代理开发、JDK的动态代理与CGLib代理
文章目录 MyBatis优化开发 日志 ResultSet如何转换为Java对象 数据库元数据 结果集元数据 Fastjson 基于MyBatis的DAO开发(传统) 推荐mapper代理开发 JDK ...
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
Java之代理... 1 一. 概念... 1 二. jdk的静态代理... 1 三. jdk动态代理... 4 四. cglib 动态 ...
- 【Spring】Spring中AOP解析 上 两种动态代理方式与ProxyFactory代理工厂
1.两种动态代理方式演示 1.1 JDK动态代理 JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程.要求被代理类必须实现一个接口 . 如下案 ...
- java设计模式--工厂模式、静态代理模式、动态代理模式
工厂模式 代码实现: 步骤一:创建一个接口 Car.java package FactoryMode;public interface Car {public void run(); } 步骤二:创建 ...
最新文章
- javascript --- 事件托付
- 过年期间:这个 GitHub 项目你必能用到
- 字符串匹配的KMP算法和C语言代码,不需要思考就能理解
- xp 远程计算机需要远程验证登陆,xp远程桌面登陆需要身份验证问题解决
- redis事务原理,使用,详解
- oppoJava面试题,腾讯社招三面多久联系
- PHP基本语法(实例)
- Flash和margue字幕滚动效果
- ReactNative绑定函数中的this
- 编码速度非常慢_有BUG?MySQL中的 utf8 居然并不是真正的UTF-8编码?
- 前端实用小工具(URL参数截取、JSON判断、数据类型检测、版本号对比等)
- yii2 Rbac使用yii命令一键建表
- jq获取页面url后边带的参数
- DependencyProperty
- 刀片系统服务器优点,刀片服务器是什么?介绍ibm刀片服务器优点
- 权威服务器和域名注册,域名服务器简介
- 考上985的研究生了!
- 关于大学生睡眠时间及质量的问卷调查
- 开源API文档管理系统
- 华为防火墙nat技术之服务器映射