- 浏览: 155147 次
- 性别:
- 来自: 球面世界
最新评论
-
zhang_yi_yi:
...
Java常用方法使用心得 -
yeshuang:
不错,希望以后多多介绍一些
Java常用方法使用心得 -
tiansong163:
我用这个怎么不行呢?
jsp实现文件下载与中文文件名乱码问题解决 -
lshhjxlj:
Yes,it very good!
Java常用方法使用心得 -
jaja_jaja:
有错误,web.xml里少了servlet-mapping部分 ...
对log4j初始化并设置log文件的存放路径
Dynamic Proxy是这样一种class:它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些 interface。你当然可以把该class的实例当作这些interface中的任何一个来用。当然啦,这个Dynamic Proxy其实就是一个Proxy,它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作 。
动态代理的定义:一个动态代理类在运行期implements一组interface,使得interface实现类的方法调用被分派至其他的类(另外的interface实现类或者任意的类)的方法。讲得更通俗一些,要了解动态代理,我们就要知道什么东西动态了,代理了什么?首先,一个Proxy代理了一组interface的方法。注意,代理的是interface,而不是Class,也不是abstract Class;其次,Proxy具有的型别由绑定的interface所决定的,动态就体现在此。
实例:
java 代码
- package cn.feigme.dynamicProxy;
- /**
- * @author Feigme
- *
- */
- public interface IOperation {
- void operationA();
- void operationB();
- }
java 代码
- package cn.feigme.dynamicProxy;
- /**
- * @author Feigme
- *
- */
- public class OperationResource implements IOperation {
- /* (non-Javadoc)
- * @see cn.feigme.dynamicProxy.IOperation#operationA()
- */
- public void operationA() {
- System.out.println("OperationResource.operationA()-->do!");
- }
- /* (non-Javadoc)
- * @see cn.feigme.dynamicProxy.IOperation#operationB()
- */
- public void operationB() {
- System.out.println("OperationResource.operationB()-->do!");
- }
- }
java 代码
- package cn.feigme.dynamicProxy;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- /**
- * @author Feigme
- *
- */
- public class OperationDynamicProxy implements InvocationHandler {
- private IOperation iOperation;
- public OperationDynamicProxy() {
- }
- public IOperation bind(IOperation iOperation) {
- this.iOperation = iOperation;
- IOperation proxyIOperation = (IOperation)Proxy.newProxyInstance(iOperation
- .getClass().getClassLoader(), iOperation.getClass()
- .getInterfaces(), this);
- return proxyIOperation;
- }
- /*
- * (non-Javadoc)
- *
- * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,
- * java.lang.reflect.Method, java.lang.Object[])
- */
- public Object invoke(Object obj, Method method, Object[] args)
- throws Throwable {
- Object o = null;
- if("operationA".equals(method.getName())){
- System.out.println("DynamicProxy.invoke()-->proxy operationA >do");
- }else{
- o = method.invoke(iOperation, args);
- }
- return o;
- }
- }
测试
java 代码
- package cn.feigme.dynamicProxy;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- /**
- * @author Feigme
- *
- */
- public class TestProxy {
- @Test
- public void DynamicProxyTest() {
- OperationDynamicProxy proxy = new OperationDynamicProxy();
- IOperation iOperation = proxy.bind(new OperationResource());
- iOperation.operationA();
- iOperation.operationB();
- }
- }
阅读上述代码:
上述就是一个简单的动态代理的例子。我们可以看到Dynamic Proxy并没有实现IOperation这个接口,但是包含了IOperation接口实现类的实例;在Dynamic Proxy的bind方法中,通过调用Proxy.newProxyInstance创建一个Proxy,并将该Proxy与IOperation接口绑定,最后将Proxy显式类型转换成IOperation接口类型并返回,这样调用者就可以通过Proxy调用interface定义的方法了;由于 Proxy与IOperation接口绑定了,对IOperation接口的方法调用,都会交由Proxy的invoke方法去处理。而invoke方法会根据不同的方法,或给以全新的实现,或直接将方法调用交给Proxy中包含的IOperation接口实现类的实例去处理。综合上面所说的,作为一个Dynamic Proxy,它必须满足以下三个条件:
1、实现了InvocationHandler接口,实现接口中定义的invoke方法;
2、包含接口实现类的实例;
3、通过Proxy.newProxyInstance方法实现Proxy与接口之间的绑定。
发表评论
-
Maven2上路
2008-06-24 21:49 2889虽然公司仍然使用ant,但自己还是尝试使用了下Maven2 网 ... -
Properties读取类
2007-12-12 22:44 3434一个properties常用类,以前收藏的 java 代码 ... -
对log4j初始化并设置log文件的存放路径
2007-12-12 22:32 10540利用servlet初始化时配置log的存放位置 java 代码 ... -
Eclipse常用快捷键(收藏)
2007-12-10 14:43 1559Eclipse常用的快捷键 Ctrl+1 快速修复(最经典的快 ... -
Java常用方法使用心得
2007-12-10 14:29 9284不断完善中ing . . . java. ... -
一个通用时间类
2007-12-10 14:14 1399引自:http://www.busfly.cn/post/ja ... -
HashCode 理解测试
2007-11-01 14:15 1707java 代码 public class Has ... -
BIRT之使用历程
2007-10-26 16:13 6301BIRT的易使用性及强大,成为项目的首选 在download. ... -
[转]一个泛型Hibernate DAO实现
2007-10-20 10:03 7489java 代码 package sgf4web. ... -
Spring与Hibernate Annotation的实现
2007-08-29 01:27 8111最近实现了Spring2.0 Hibernate3.2 ... -
spring_hibernate_annotation的三种实现
2007-08-23 15:21 1739xml 代码 <!--第一种 ====== ... -
一个动态的model
2007-08-10 11:17 1244java 代码 import java.uti ... -
让人迷糊的interface和abstract
2007-08-10 09:57 1304最近在做公司的一个项 ... -
jdk5.0 新用法
2007-08-03 19:40 1468JDK5.0 有SuppressWarnings,De ... -
用jsp写的日历
2007-07-16 14:38 1566觉得日历不应该要那么麻烦 为什么发上来的代码那么难看。。。只能 ... -
分页公用类PaginationSupport
2007-07-11 10:32 3848最近看了 robbin等大侠写 ... -
好文章锦集
2007-07-03 21:56 1101dao + hibernate 设计 http://www.i ... -
解决web开发中的中文问题
2006-08-09 09:41 1232这段时间经常看到有人问到web开发中怎么中文总是?号。原因其实 ... -
jsp实现文件下载与中文文件名乱码问题解决
2006-08-10 16:36 5132之前,写过一个Download.jsp文件,可以解决下载文件乱 ... -
struts 实现文件上传与下载
2007-04-18 19:13 3551/****************************** ...
相关推荐
安卓Android源码——TorProxy和Shadow开源项目.zip
Android源码——TorProxy和Shadow开源项目.zip
Android源码——TorProxy和Shadow开源项目.7z
经典的Android项目——TorProxy和Shadow开源项目.zip
Castle Dynamic Proxy代理使用 Castle Dynamic Proxy是.NET平台下的一个动态代理库,提供了一个灵活的方式来生成代理类。它可以动态生成透明代理类型,不需要实体类继承MarshalByRef或ContextBoundObject。 Castle...
【课程大纲】 第1章 初始MySQL 共19...第21章 读写分离的利器——MySQL Proxy 共5页.pptx 第22章 PHP操作MySQL数据库 共7页.pptx 第23章 新闻发布系统数据库设计 共6页.pptx 第24章 论坛管理系统数据库设计 共6页.pptx
package cn.sxt.dynamicproxy; import java.util.ArrayList; import java.util.List; import cn.sxt.service.UserService; import cn.sxt.service.UserServiceImpl; public class Client { public ...
这个“安卓Android源码——TorProxy应用实现了Android手机无线电电传通讯(TOR)”的压缩包文件提供了一个具体的实例,展示了如何在Android设备上集成Tor服务,以增强用户隐私和数据安全。 首先,Tor(The Onion ...
《解决IBatisNET v1.x在.NET 4.0下'Ambiguous match found'问题:Castle.DynamicProxy深度解析》 在.NET开发过程中,框架的选择和兼容性问题是开发者常常面临的挑战。其中,IBatisNET作为一款优秀的数据访问层框架...
"安卓Android源码——TorProxy应用实现了手机无线电电传通讯(TOR)"是一个专注于隐私保护和匿名网络浏览的项目,它利用了著名的TOR网络。这篇内容将深入探讨这个项目的核心知识点,包括Android源码、TorProxy应用以及...
Castle框架注入依赖所需dll Version:2.1.0.0
DynamicProxy.zip
这是动态代理的简单实例,方便学,入手.这个例子非常的简单哦!
绿色软件,无需安装,可以自动添加、修改代理服务器ip地址
在本示例中,`ChannelFactory` 和 `DynamicProxy` 是两个关键概念,它们与WCF中的动态调用密切相关。 **ChannelFactory** 是WCF客户端编程模型中的一个重要组件。它是一个工厂模式的实现,用于创建与服务契约相匹配...
配合 LinFu.DynamicProxy 1.0.4.18998 NHibernate使用中框架动态代理方式 LinFu框架 如果使用LinFu.DynamicProxy动态代理,引用NHibernate.ByteCode.LinFu.dll程序集并配置proxyfactory.factory_class节点为 ...
Java反射(Reflection)和动态代理(Dynamic Proxy)是Java编程中的高级特性,它们为程序提供了强大的功能和灵活性。本文将深入探讨这两个主题,并通过源码分析来加深理解。 首先,让我们了解一下Java反射。反射机制...