静态代理,动态代理,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();
}
}
静态代理,动态代理,Cglib代理详解的更多相关文章
- 静态代理和动态代理(jdk/cglib)详解
1.静态代理模式 代理模式上,基本上有Subject角色,RealSubject角色,Proxy角色.其中:Subject角色负责定义RealSubject和Proxy角色应该实现的接口:RealSu ...
- spring AOP 代理(静态与动态+使用cglib实现)
一.没有代理模式 缺点: 1.工作量特别大,如果项目中有多个类,多个方法,则要修改多次. 2.违背了设计原则:开闭原则(OCP),对扩展开放,对修改关闭,而为了增加功能把每个方法都修改了,也不便于维护 ...
- 大厂高级工程师面试必问系列:Java动态代理机制和实现原理详解
代理模式 Java动态代理运用了设计模式中常用的代理模式 代理模式: 目的就是为其他对象提供一个代理用来控制对某个真实对象的访问 代理类的作用: 为委托类预处理消息 过滤消息并转发消息 进行消息被委托 ...
- [转]反向代理过程与Nginx特点详解
原文链接:<Nginx搭建反向代理服务器过程详解> 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内 ...
- 分享知识-快乐自己:三种代理(静态、JDK、CGlib 代理)
1):代理模式(静态代理)点我下载三种模式源码 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. 静态代理由 业务实现类.业务代理类 两部分组成 ...
- Nginx代理功能与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
- nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解
nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...
- CentOS 7 配置 Nginx 正向代理 http、https 最详解
手头项目中有使用到 nginx,因为使用的三方云服务器,想上外网需要购买外网IP的,可是有些需要用到外网却不常用的主机也挂个外网IP有点浪费了,便想使用nginx的反向代理来实现多台内网服务器使用一台 ...
- Java代理模式之Cglib代理
Cglib代理,也叫做子类代理.在内存中构建一个子类对象从而实现对目标对象功能的扩展. CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类.不鼓励直接使用ASM,因 ...
- 代理模式之Cglib代理
Cglib代理,也叫做子类代理.在内存中构建一个子类对象从而实现对目标对象功能的扩展. l JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口.如果想代理没有实现接口的类,就可 ...
随机推荐
- 苹果禁用UUID了,咋办?
By now you have probably heard that Apple is deprecating support for attaining a UDID from an iOS de ...
- 怎样运用servlet
制作登陆界面 login.html <!DOCTYPE html> <html> <head> <title>login.html</title& ...
- 咏南中间件增加HTTPS.SYS支持
咏南中间件增加HTTPS.SYS支持 老客户可免费升级. HTTPS.SYS可以开发强大而稳定的REST SERVER. 微软在Windows Vista (server 2008) 以后使用http ...
- The Scope Chain
JavaScript is a lexically scoped language: the scope of variable can be thought of as the set of sou ...
- Solr 从文件创建索引
http://blog.csdn.net/clj198606061111/article/details/21492457 http://wiki.apache.org/solr/Extracting ...
- (zxing.net)一维码EAN 8的简介、实现与解码
一.简介 一维码EAN 8:属于国际标准条码,由8个数字组成,属EAN的简易编码形式(EAN缩短码).当包装面积小于120平方公分以下无法使用标准码时,可以申请使用缩短码. 依结构的不同,EAN条码可 ...
- Linq与数据库的连接显示查询(一)
使用linq查询sql数据库是首先需要创建一个 linq to sql 类文件 创建linq to sql的步骤: 1在Visual Studio 2015开发环境中建立一个目标框架 Fra ...
- Window 10 单机配置MYSQL主从同步
Master数据库:127.0.0.1:3306 Slave数据库:127.0.0.1:3307 Master操作 修改ini信息 Master MYSQL安装目录下,找到my.ini,在[mysql ...
- django drf CreateModelMixin和Serializer.validate_columun
view demo class ValidateCodeSet(mixins.CreateModelMixin, viewsets.GenericViewSet): serializer_class ...
- Neutron 是怎么实现虚拟三层网络的
Neutron 对虚拟三层网络的实现是通过其 L3 Agent (neutron-l3-agent).该 Agent 利用 Linux IP 栈.route 和 iptables 来实现内网内不同网络 ...