代理模式---动态代理
来源:互联网 发布:淘宝注册账号流程 编辑:程序博客网 时间:2024/04/29 09:27
代理模式---动态代理
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
按照代理的创建时期,代理类可以分为两种。
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。
优点:
一:可以隐藏委托类的实现;
二:可以实现客户与委托类间的解耦,在不修改委托类代码的情况下能够做一些额外的处理。
jdk动态代理
此种代理方式基于接口编程的,必须要有实现的接口的过程,否则不能使用此种代理方式。
定义接口
public interface ProxyTest { void sayHello(String a); void sayTest(int b);}实现接口
@SuppressWarnings("serial")public class ProxyTestImpl implements ProxyTest, Serializable { public void sayHello(String a) { System.out.println("hello"); } public void sayTest(int b) { System.out.println("test"); }}
获取代理实例public class Proxyclient implements InvocationHandler, Serializable { //实际要代理的对象 private Object obj; public Proxyclient(Object object) { this.obj = object; } //获取代理实例 public Object getProxy() { return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } //回调实现被代理类的调用的方法 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("invoke 调用!" + "args" + args[0]); return method.invoke(obj, args); } public static void main(String[] args) { ProxyTest target = new ProxyTestImpl(); //获取代理实例 ProxyTest impl = (ProxyTest) new Proxyclient(target).getProxy(); System.out.println(impl.getClass()); //使用代理类实例调用被代理类的方法 impl.sayHello("hello"); impl.sayTest(1); }}
执行结果
阅读全文
0 0
- 代理模式--动态代理
- 代理模式 & 动态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式之动态代理
- java代理模式--动态代理
- 代理模式之动态代理
- 代理模式之动态代理
- 代理模式之动态代理
- 代理模式和动态代理
- 代理模式与动态代理
- 解决Nginx+Tomcat中https转http请求问题
- PAT考试乙级1024(C语言实现)重点题目
- pms解析--未完待续
- ionic1 过滤器代码
- 动态内存(一)使用动态内存
- 代理模式---动态代理
- linux管道pipe详解
- rz lz 的安装
- 用fast rcnn训练自己的数据集时遇到的问题索引问题
- Android 设备指纹
- 【安全牛学习笔记】使用 USB 设备来安装系统
- mysql(4)-主从复制
- ELK 5.X 安装head 插件
- CVX介绍——函数参考指南