- 浏览: 227320 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
thebye85:
引用 另外一个需要注意的问题,就是SessionMap和隐藏对 ...
WebWork深度探索之Session -
lanxiaoshuang:
写的真好
说的都是概念——有关编程范式 -
lhz:
grep unique wc你需要的只是这么几个小工具而已
努力做个Pragmatic Programmer
在之前的一篇关于Decorator模式的Post中,曾经提到了动态代理(Dynamic Proxy)简化了Decorator模式的实现。作为例子的代码很容易理解,但这个简化的背后仍包含着很多值得去发掘的内容。
首先我们来明确一下动态代理的定义:一个动态代理类在运行期implements一组interface,使得interface实现类的方法调用被分派至其他的类(另外的interface实现类或者任意的类)的方法。讲得更通俗一些,要了解动态代理,我们就要知道什么东西动态了,代理了什么?首先,一个Proxy代理了一组interface的方法。注意,代理的是interface,而不是Class,也不是abstract Class;其次,Proxy具有的型别由绑定的interface所决定的,动态就体现在此。也许看着这样的定义,还是会一头雾水,那么我们画幅图来看看吧。
首先我们来明确一下动态代理的定义:一个动态代理类在运行期implements一组interface,使得interface实现类的方法调用被分派至其他的类(另外的interface实现类或者任意的类)的方法。讲得更通俗一些,要了解动态代理,我们就要知道什么东西动态了,代理了什么?首先,一个Proxy代理了一组interface的方法。注意,代理的是interface,而不是Class,也不是abstract Class;其次,Proxy具有的型别由绑定的interface所决定的,动态就体现在此。也许看着这样的定义,还是会一头雾水,那么我们画幅图来看看吧。
从图中,我们可以看到Dynamic Proxy并没有实现Resource这个接口,但是包含了Resource接口实现类的实例;在Dynamic Proxy的create方法中,通过调用Proxy.newProxyInstance创建一个Proxy,并将该Proxy与Resource接口绑定,最后将Proxy显式类型转换成Resource接口类型并返回,这样调用者就可以通过Proxy调用interface定义的方法了;由于Proxy与Resource接口绑定了,对Resource接口的方法调用,都会交由Proxy的invoke方法去处理。而invoke方法会根据不同的方法,或给以全新的实现,或直接将方法调用交给Proxy中包含的Resource接口实现类的实例去处理。综合上面所说的,作为一个Dynamic Proxy,它必须满足以下三个条件:
1、实现了InvocationHandler接口,实现接口中定义的invoke方法;
2、包含接口实现类的实例;
3、通过Proxy.newProxyInstance方法实现Proxy与接口之间的绑定。
以下代码给出了一个简单的Dynamic Proxy实现:
public interface Resource {
public void operationA();
public void operationB();
}
public void operationA();
public void operationB();
}
public class ConcreteResource implements Resource {
public void operationA() {
System.out.println("Operation A.");
}
public void operationB() {
System.out.println("Operation B.");
}
}
public void operationA() {
System.out.println("Operation A.");
}
public void operationB() {
System.out.println("Operation B.");
}
}
public class DynamicProxy implements InvocationHandler {
private Resource resource;
public DynamicProxy() {
resource = new ConcreteResource();
}
public Resource create() {
Resource returnResource = null;
returnResource = (Resource) Proxy.newProxyInstance(Resource.class.getClassLoader(), new Class[]{ Resource.class }, this);
return returnResource;
}
public Object invoke(Object obj, Method method, Object[] args) {
Object o = null;
try {
if (method.getName().equals("operationA")) {
System.out.println("OperationA in Proxy");
} else {
o = method.invoke(obj, args);
}
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
}
private Resource resource;
public DynamicProxy() {
resource = new ConcreteResource();
}
public Resource create() {
Resource returnResource = null;
returnResource = (Resource) Proxy.newProxyInstance(Resource.class.getClassLoader(), new Class[]{ Resource.class }, this);
return returnResource;
}
public Object invoke(Object obj, Method method, Object[] args) {
Object o = null;
try {
if (method.getName().equals("operationA")) {
System.out.println("OperationA in Proxy");
} else {
o = method.invoke(obj, args);
}
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
}
public class Test {
public static void main(String[] args) {
DynamicProxy proxy = new DynamicProxy();
Resource resource = proxy.create();
resource.operationA();
}
}
public static void main(String[] args) {
DynamicProxy proxy = new DynamicProxy();
Resource resource = proxy.create();
resource.operationA();
}
}
发表评论
-
在String的面前丢脸
2004-06-18 00:39 1265重返C++的世 ... -
Summary of function parameter
2004-07-14 02:33 1141对C++这位入 ... -
此Vector非彼Vector
2004-08-05 15:51 1046在学习STL的过程中,我发现了一个熟悉的面孔— ... -
模板——泛型和STL的基础
2004-08-07 01:01 1327所谓泛型,从字面上可以猜想,就是泛化的类型(型 ... -
让人头痛的Vector(提问篇)
2004-08-07 16:55 1230在写完了此Vector非彼Vector这篇随笔 ... -
我该怎样shuffle呢
2004-08-10 01:47 1180在STL的Algorithm中有着这样的一种算 ... -
WebWork初体验
2004-08-11 17:43 1290在这篇ASP.NET ... -
WebWork深度探索之盲人摸象
2004-08-12 23:54 1130昨天尝试着利用WebWork做了一个小功能[1 ... -
WebWork深度探索之号外
2004-08-14 09:03 1041昨天开始对WebWork进行了一些初步的探索[ ... -
WebWork深度探索之标签库
2004-08-15 00:28 1531由于WebWork本身提供了一套自定义的标签库 ... -
什么是Law of Demeter
2004-08-15 14:22 1234今天一如昨日,继续对WebWork进行小打小闹 ... -
所谓的Dumb Question
2004-08-15 17:16 1035为了能够更 ... -
WebWork深度探索之标签库(续)
2004-08-16 15:58 1128昨日对WebWork的标签库进行了小小的研究[ ... -
WebWork深入探索之初见端倪
2004-08-19 16:35 899使用WebWork进 ... -
建网站的小Tips
2004-08-20 23:58 1035这几天都在忙着做一个小网站,从网页美工到后台处 ... -
URL与RequestDispatcher
2004-08-21 23:58 1003今天照例继续自己的网站建设之旅,原本以为可以大 ... -
WebWork深度探索之Pitfall
2004-08-25 14:31 958在使用WebWork进行开发的过程中,她的种种 ... -
WebWork深度探索之Session
2004-08-26 15:38 1523昨天上午刚 ... -
搞笑的textarea标签
2004-08-31 18:17 1583很久没有用 ... -
两天四疑问
2004-09-03 10:56 9949月份的前两天,我仍然做着网站开发的工作。在开 ...
相关推荐
三言两语.doc
### Erlang与并发编程 #### 引言 随着硬件技术的发展,多核处理器逐渐成为主流配置,这为软件设计带来了新的挑战与机遇。Erlang作为一种专为并发环境设计的编程语言,在这样的背景下显得尤为突出。...
CAD布局三言两语教程 关于CAD布局、打印、比例的详细解释
三言两语小程序源码 ,绝对对得起这个分数! 小程序瀑布了流, 小程序阅读器, 小程序案例,小程序成熟案例
2020届高考语文 作文备考素材 一字一词勾勒年度热点,三言两语浓缩时代精神.doc
此外,指针在动态内存管理中扮演关键角色。使用new运算符分配内存,返回的是内存块的起始地址,可以赋值给指针。当不再需要这块内存时,用delete释放。例如: ```cpp int *p = new int; // 动态分配一个int类型的...
3) 三言两语型,阅读量不足和想象力贫乏导致学生的写话语句简短,缺乏生动性;4) 依赖家长型,学生过于依赖家长帮助,影响独立写作能力的培养。 针对这些问题,教案提出了相应的对策:1) 鼓励学生动笔,降低写话...
1. 很少的几句话:三言两语 2. 随口乱说的话:胡言乱语 3. 说了很多的话:千言万语 4. 含有讽刺意味的风凉话:冷言冷语 5. 自己对自己说的话:自言自语 6. 无根据,恶意中伤的话:流言蜚语 7. 豪迈雄壮的话:...
"说话是没有硝烟的战争,三言两语说得好能赢得人心,三言两语说不好能招来杀身之祸",这句话教导孩子语言的力量,提醒他们在沟通中要注意表达方式。"你应该将注意的焦点集中在寻找方法上,而不是借口上",这强调了...
如"不言不语"表示沉默不说话,"只言片语"指少量的话语,"三言两语"形容话少而简洁,"千言万语"表示话语众多,"豪言壮语"形容豪迈激昂的话,"少言寡语"形容话少,"自言自语"是自己对自己说话,"甜言蜜语"则是讨好或...
简短的话——三言两语,虚伪的话——甜言蜜语,动听的话——花言巧语,粗鲁的话——污言秽语,自言自语——自己对自己说话,恶言恶语——用恶毒的话骂人,轻言轻语——说话温和,豪言壮语——豪迈的话,千言万语——...
由于jsp需要搭建环境,而环境的搭建,有时候又不是三言两语说得清楚的,尤其是数据库的链接(本文所用的是jsp + Sqlsever2000 环境),所以对初学者来说比较难上手。现在,我想结合自己的一些经验,演示并用最简单的...
1. 很少的几句话:三言两语。 2. 说了很多的话:千言万语。 3. 自己对自己说的话:自言自语。 4. 豪迈雄壮的话:豪言壮语。 5. 像蜜糖似的话:甜言蜜语。 6. 随口乱说的话:胡言乱语。 7. 含有讽刺意味的风凉话:...
全部翻译完了,给我的感觉就是这篇文章是为已有汇编基础但从未接触过Windows汇编编程的读者写的,虽然对我来说这些内容很简单,但也觉得说的很详细了,好过国内许多三言两语的所谓菜鸟教程;但如果读者想全面学习Win...
- 三言两语(非常少的几句话);自言自语(自己对自己说话);甜言蜜语(虚假而动听的话);胡言乱语(随口胡说的话)。 3. 含有十二生肖动物的成语: - 例如:鼠目寸光、牛刀小试、虎背熊腰、兔死狐悲、龙飞凤舞...
例如,灯谜“五句话”对应的谜底是“三言两语”,意味着简短的话语;“反刍”对应“吞吞吐吐”,形容说话犹豫不决;“空袭警报”对应“一鸣惊人”,形容事物突然出现,引起轰动。这些成语的使用展示了汉语的精炼和...
- 简短的话用“三言两语”:寥寥几句话就概括了意思。 - 虚伪而动听的话用“甜言蜜语”:用好听的话讨好别人。 - 为讨人喜欢而说的动听的话用“花言巧语”:虚假的恭维。 - 粗鲁的话用“污言秽语”:粗俗、下流...
- "很少的几句话":三言两语。 - "像蜜糖似的话":甜言蜜语。 - "自己对自己说的话":自言自语。 - "豪迈雄壮的话":豪言壮语。 - "虚假而动听的话":花言巧语。 - "随口乱说的话":胡言乱语。 6. 十二生肖歇...
- 含"言"和"语"的成语:例如"三言两语"表示很少的话,"自言自语"指自己对自己说话,"花言巧语"形容虚假动听的话,"胡言乱语"指随口乱说。 - AABB式成语:如"轰轰烈烈"形容规模气势大,"结结巴巴"形容说话不流利,...