静态代理,动态代理,Cglib代理详解
一.静态代理
新建一个接口 定义一个玩家方法:
package com."".proxy.staticc;public interface Iplayer {
public void play();
}
建一个你自己玩游戏的类
package com."".proxy.staticc;public class YourPlayer implements Iplayer {public void play() {System.out.println("登录");System.out.println("刷图中======");System.out.println("刷图中======");System.out.println("刷图中======");System.out.println("退出");}}
建立代理类
package com."".proxy.staticc;public class DaLiPlayer implements Iplayer{ private Iplayer player = new YourPlayer();public DaLiPlayer(Iplayer player){this.player = player; }//环绕通知public void play() {System.out.println("代练");//前置通知 player.play();System.out.println("还号");//后置通知 }}
开始代理玩游戏
package com."".proxy.staticc;public class Client {
public static void main(String[] args) {//传递玩家账号YourPlayer yourPlayer = new YourPlayer();//找到代理人DaLiPlayer daLiPlayer = new DaLiPlayer(yourPlayer);//开始玩游戏daLiPlayer.play();
}
}
二.动态代理
动态代理的方法和静态比较类似 只是可以动态的代理目标 这里展示下具体代码
package com."".jdkproxy;public interface Iplayer {String name = "123";public abstract void play();}
package com."".jdkproxy;public class DnfPlayer implements Iplayer {public void play() {System.out.println("我只玩DNF,把你们负责人叫出来!");}}
package com."".jdkproxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class ProxyPlay implements InvocationHandler{private Object targetObject = new Object();public Object createProxy(Object targetObject){this.targetObject = targetObject;return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("前置代理");Object obj = method.invoke(targetObject, args);System.out.println("后置代理");return obj;}}
package com."".jdkproxy;public class Test {
public static void main(String[] args) {//获得需求的玩家Iplayer player = new DnfPlayer();//找对应的代理对象ProxyPlay proxy = new ProxyPlay();//执行代练方法Iplayer pl = (Iplayer) proxy.createProxy(player);pl.play();//魔兽玩家WowPlayer wow = new WowPlayer();Iplayer pl2 = (Iplayer) proxy.createProxy(wow);pl2.play();}
}
三.Cglib代理详解
package com."".cglibproxy;public interface IPlayer { public void play(); }
package com."".cglibproxy;public class DNFPlayer implements IPlayer{public void play() {System.out.println("我只玩DNF 给我找个代练");}}
package com."".cglibproxy;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; //cglib代理 public class ProxyHome implements MethodInterceptor{private Object tarObject;public Object createCglib(Object tarObject){this.tarObject = tarObject;Enhancer enhancer = new Enhancer();enhancer.setClassLoader(tarObject.getClass().getClassLoader());enhancer.setInterfaces(tarObject.getClass().getInterfaces());enhancer.setCallback(this);return enhancer.create();}public Object intercept(Object obj, Method method, Object[] args,MethodProxy arg3) throws Throwable {System.out.println("给你登录代练开始"); Object object = method.invoke(tarObject, args);System.out.println("给你退出代练结束");return object;}}
package com."".cglibproxy;public class Test { public static void main(String[] args) {IPlayer p2 = new DNFPlayer();ProxyHome proxy = new ProxyHome();IPlayer tp = (IPlayer) proxy.createCglib(p2);tp.play();} }
转载于:https://www.cnblogs.com/charlypage/p/8878452.html
静态代理,动态代理,Cglib代理详解相关推荐
- CentOS7 iP 静态网卡 动态网卡 详细设置详解
CentOS6 网卡设置 好废话不多说我们就开始 首先网卡呢是分静态和动态的 CentOS6静态IP设置 1. cd /etc/sysconfig/network-scripts 2. vi ifcf ...
- android动态贴纸实现原理,人脸动态贴纸sdk算法详解,人脸动态贴纸功能如何实现...
原标题:人脸动态贴纸sdk算法详解,人脸动态贴纸功能如何实现 泛娱乐行业在互联网领域中发展趋势逐渐增强,而直播.短视频.视频社交等作为头部产品受到了众多用户的关注和喜爱.为了能够更好的满足用户体验,众 ...
- 逆变效率软件测试,【干货】光伏逆变器动态MPPT效率测试详解
原标题:[干货]光伏逆变器动态MPPT效率测试详解 在现实生活中,由于阳光照射角度.云层.阴影等多种因素影响,光伏阵列接受到的阳光辐照度和相应温度在不同的条件下会有很大的差别,比如在早晨和中午,在 晴 ...
- python画动图-Python绘制动态水球图过程详解
先来看看绘制的动态水球图: 没有安装PyEcharts的,先安装PyEcharts: # 安装pyecharts模块,直接安装就是最新的版本pip install pyecharts 安装好PyEch ...
- java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...
先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...
- mybatis-day02-CRUD、动态代理开发、核心xml详解、输入输出参数
文章目录 一.今日内容 二.mybatis实现crud 2.1 搭建环境(配置文件参考a.网址)(顺便实现findAll查询) 目录结构: pom.xml User.java SqlMapConfig ...
- 代理模式(静态代理模式、动态代理模式、cgLib代理模式、拦截器)
目录 一.什么是代理? 二.代理的好处 三.实现代理的步骤 四.静态代理 五.动态代理
- 终于有人把 java代理 讲清楚了,万字详解!
什么是代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联 ...
- 设计模式之代理模式、动态代理模式、Cglib代理模式
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的 ...
- 终于有人把 Java代理讲清楚了,万字详解!
什么是代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联 ...
最新文章
- 百度地图 js 在安卓端手指缩放无效_利用百度地图绘制3D轨迹演示
- 2016年股市上扬将一路顺畅
- 五、JavaScript基础知识,学会操作元素的简单事件(一)
- MindManager脑图之项目管理甘特图
- [HTML]HTML5实现可编辑表格
- selenium使用TestNG实现DDT
- (2)Linux进程调度器-CPU负载
- java.lang.Object android.content.Context.getSystemService(java.lang.String)‘ on a null object
- IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别参考
- 气泡shader_仿蚂蚁森林气泡
- windows系统上安装与使用Android NDK r5
- 数学建模 线性规划报告_春哥带你学建模数学建模国赛基础入门班(适合小白/零基础)...
- python header函数_Header函数
- win10如何修改dns服务器地址,win10如何修改dns服务器地址
- c语言1e05,RSA加密、解密的纯C语言版本
- 【云原生之Docker实战】使用Docker部署phpMyAdmin数据库管理工具
- python之np.narray与 list 相互转换
- 怎么看越努力,越幸运?
- 如何激发员工内在驱动,制定有挑战的OKR?
- 关于vs2010(C++ 工程)的异常问题(this is not a valid c/c++ file .CPP)的解决(C++ 初学者)
热门文章
- DSP之外部设备连接接口之HPI
- 计算机科学与技术考研多少分算高分,清华计算机科学与技术系考研初复试高分经验分享...
- 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...
- 【JAVA程序设计】从HelloWorld开始
- 【C++入门】C++ string类
- 全文搜索引擎 Elasticsearch 入门概念
- java matches方法
- WebLOAD Open Source 从入门到精通
- 电商网站商品图片放大镜实现
- ScrollView滑动控制