博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dynamic Proxy (动态代理模式)
阅读量:6994 次
发布时间:2019-06-27

本文共 1648 字,大约阅读时间需要 5 分钟。

动态代理(运行期行为)主要有一个 Proxy类 和一个 InvocationHandler接口

动态代理角色:

1. 抽象主题角色

2. 真实主题角色(实现了抽象主题接口)

3. 动态代理主题角色(实现了 InvocationHandler接口,并实现了 invoke()方法)

Proxy 要调用 newProxyInstance方法

 

代码演示:

 

1.抽象主题角色 SubjectDemo.java

 

package com.dynamicproxy ; public interface SubjectDemo { public void request() ; }

 

2. 真实主题角色 RealSubjectDemo.java

 

package com.dynamicproxy ; public class RealSubjectDemo implements SubjectDemo { public void request() { System.out.println("实现了某请求") ; } }

 

3. 动态代理主题角色 DynamicProxySubjectDemo.java

 

package com.dynamicproxy ; import java.lang.reflect.InvocationHandler ; import java.lang.reflect.Method ; public class DynamicProxySubjectDemo implements InvocationHandler { private Object sub ; public DynamicProxySubjectDemo(Object obj) { this.sub = obj ; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before"+method) ; method.invoke(sub, args) ;//真实的调用方法操作 System.out.println("after"+method) ; return null ; } }

4.客户端 Client.java

 

package com.dynamicproxy ; import java.lang.reflect.InvocationHandler ; import java.lang.reflect.Proxy ; public class Client { public static void main(String[] args) { RealSubjectDemo rsd = new RealSubjectDemo() ; InvocationHandler handler = new DynamicProxySubjectDemo(rsd) ; Class<?> classType = handler.getClass() ; // classType.getClassLoader() 动态代理类的类加载器 //rsd.getClass().getInterfaces() 代理类要实现的接口列表 //handler 指派方法调用的调用处理程序 SubjectDemo sd = (SubjectDemo)Proxy.newProxyInstance(classType.getClassLoader(), rsd.getClass().getInterfaces(), handler ) ; //这行代码一执行 转到 InvocationHandler handler = new DynamicProxySubjectDemo(rsd) //执行invoke方法 sd.request() ; } }

 

 

 

 

 

 

 

 

转载地址:http://dhfvl.baihongyu.com/

你可能感兴趣的文章
分享非常漂亮的WPF界面框架源码及其实现原理
查看>>
如何获取ResultSet的行数和列数(转)
查看>>
绑定列ORA-24816: 在实际的 LONG 或 LOB 列之后提供了扩展的非 LONG 绑定数据
查看>>
Mobile Web调试工具Weinre
查看>>
Android巴士转发
查看>>
未能进入中断模式,原因如下:源文件“XXXXXX”不属于正在调试的项目。
查看>>
linux编程掌握常用命令
查看>>
asp.net获取客户端IP,Mac
查看>>
Linux内核-内核线程
查看>>
zoj 1152 A Mathematical Curiosity
查看>>
UML时序图总结
查看>>
【2013Esri全球用户大会精彩案例】Horry Count GIS--南卡罗来那州霍里县企业级应用...
查看>>
c++虚函数表 Brew VTBL
查看>>
SQL Server 2008开启sa账户以及如何用JDBC进行连接
查看>>
读取同一文件夹下多个txt文件中的特定内容并做统计
查看>>
为sourceinsight添加makefile、kconfig、*.S文件支持
查看>>
sharepoint2010问卷调查(1)-实现问卷的图片调查(采用JS实现)
查看>>
linux下如何挂接(mount)光盘镜像文件、移动硬盘、U盘、Windows网络共享和NFS网络共享...
查看>>
python开发_函数的参数传递
查看>>
利用mysqldump 实现每天备份方案
查看>>