之前在使用spring的时候就了解过java中的代理机制,但是当时也是理解的一知半解的.今天看了组长一篇有关无等待数据库连接池的文章,里面使用到Proxy绕过Connection
的正常关闭,而把Connection 放入到队列中重复使用从而提高数据库连接数度,提高机器效率!(http://www.javagg.com/diary/88574472)
重温Proxy的作用后,感觉对以前模糊的理解有所帮助!
特写下一段示例代码:
interface HandleTask {
public void open();
public void close();
}
class WorkTask implements HandleTask {
@Override
public void close() {
// TODO Auto-generated method stub
}
@Override
public void open() {
System.out.println("开门");
}
}
代理操作和不使用代理的区别:
public class TestProxy implements InvocationHandler {//实现InvocationHandle中invoke方法
private HandleTask task;
public TestProxy(HandleTask task) {
this.task = task;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj = null;
if (method.getName().equals("open"))//针对代理对象各方法的操作
System.out.println("开门了!");
obj = method.invoke(task, args);
return null;
}
public HandleTask getHandleTask() {
return (HandleTask) Proxy.newProxyInstance(task.getClass().getClassLoader(), new Class[] { HandleTask.class }, this);
}
public static void main(String[] args) {
HandleTask ht = new WorkTask();
ht.open();
System.out.println("/////////代理前");
TestProxy tp = new TestProxy(ht);//把ht实例关联上代理操作
ht = tp.getHandleTask();
//经过代理关联ht实例和之前似乎没有什么不一样,但是....
ht.open();
}
}
运行结果:
开门
/////////代理前
开门了!
开门
看到了,ht实例在代理前后相同方法的调用,出现了不同的情况.这就是代理的杰作!
个人理解:
代理就如同对实例的监视器,当要对实例操作的时候,可以通过代理规则对其操作进行一些逻辑和干预.
就如同现在一些汽车上的GPS系统,在汽车被盗以后,可以通过远程遥控获取汽车的位置然后死锁汽车,让其小偷不能把车顺利转移!
分享到:
相关推荐
Java经典程序是编程学习者和开发者的重要资源,尤其对于初学者而言,它们是理解Java语言特性和编程思想的宝贵教材。这个"java-classic-program.rar"压缩包包含了名为"java经典小程序.doc"的文档,我们可以从中挖掘出...
### Java实验指导书 2009 知识点概览 #### 一、JAVA实验指导概述 **实验目的与要求:** 本实验指导书旨在帮助学生掌握Java编程的基础知识和高级特性,通过一系列的实验任务,加深对Java语言的理解,并能够独立完成...
这些PPT文件构成了一个关于Java编程的系列教程,涵盖了从基础到进阶的主题。以下是根据文件名和标签“java”推断出...通过学习这个系列,初学者可以全面掌握Java编程,而有一定经验的开发者也可以温故知新,提升技能。
行业报告“温故知新,从4G看5G”为我们揭示了移动通信技术从4G到5G的演进历程、技术变革及其对社会经济的深远影响。这份报告深入探讨了5G的关键特性,包括超高速率、低延迟、大规模连接以及网络切片等,这些都是5G...
ZYNQ7100,PL 纯逻辑,简单入门 FPGA LED 例程 工程对应的视频教程(1.1 ZYNQ学习分享-温故知新-PL-led):https://www.ixigua.com/6878303436048335371/
在本项目"温故知新,通过学习尚学堂飞机游戏项目,理解Java语言基础知识.zip"中,我们可以深入探讨Java编程语言的基础知识,并结合实际的游戏开发经验来加深理解。这是一个非常适合初学者或者想要巩固Java基础的...
通信行业:温故知新,从4G看5G-1202-中信建投-12页.pdf
冒泡排序是一种基础且经典的排序算法,主要应用于计算机科学领域,特别是在编程语言如Java中。它的名字来源于排序过程中较小的元素像气泡一样逐渐...如果你是经验丰富的开发者,回顾这些基础知识也会有助于温故知新。
在本项目"java-practice"中,我们主要关注的是Java编程语言的实践应用。这个练习集可以帮助初学者和有经验的开发者巩固Java基础知识,提升编程...对于有经验的开发者,这些练习可以帮助你温故知新,保持技能的更新。
【标题】"题库源码java-Java-Algorithm:刷过的Java算法题源码仓库" 指的是一项专门用于学习和实践Java编程语言中算法的开源项目。这个项目的目标是收集并整理开发者在刷算法题过程中编写的Java源代码,以供他人参考...
总的来说,这个Java基础项目提供了丰富的实践机会,可以帮助初学者巩固基础,提升编程能力,同时也能让有一定经验的开发者温故知新,深入理解Java在游戏开发中的应用。通过实际操作,我们可以更好地理解和掌握Java...
在本资源"Java编程复习代码"中,作者...对于Java基础不牢固的学生,这是一个很好的温故知新的机会,可以帮助他们巩固理论知识,提升编程能力。同时,通过阅读作者的笔记,可以学习到编程思维和经验,有助于自我提升。
这个压缩包中的内容旨在帮助初学者逐步掌握Java编程语言,同时也适合有一定经验的开发者温故知新或者深入特定领域。让我们逐一探讨这些文件所涵盖的知识点。 首先,我们看到的是"01firstapplication.pdf",这是Java...
Java语言程序设计是编程...本套中文课件涵盖了Java编程的方方面面,不仅适用于初学者,也适合有一定经验的开发者温故知新。通过系统学习和实践,你将能够熟练掌握Java语言,为成为一名优秀的Java程序员打下坚实基础。
综上所述,《Building Java Programs》是一本全面覆盖Java编程基础的教材,适合初学者入门,也适合有经验的开发者温故知新。通过阅读和实践书中的内容,读者可以建立起坚实的Java编程基础,为进一步学习更高级的Java...
农林牧渔行业专题研究:温故知新,复盘上两轮生猪疫情影响-0213-广发证券-17页.pdf
积分管理系统java源码 new-and-old 温故: 资源的释放问题: java中需要手动释放的资源目前接触的主要有 1)io流资源 2)jdbc资源 关闭原则主要是先开后关,从里到外。 具体实现方法为放在try-catch-finally语句块...
- **温故知新**:通过实习实训回顾所学知识,并结合实践加深理解。 - **培养动手能力**:提高解决实际问题的能力,尤其是编程方面的实践技能。 - **锻炼思维**:在项目开发过程中培养逻辑思维能力和问题解决能力。 -...
本文将深入探讨这些技术,帮助开发者温故知新,理解它们的功能、工作原理以及如何在实际项目中应用。 ### JSP(JavaServer Pages) JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容...