`

Proxy的了解

阅读更多

 

 

    文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javajs/20090205/154868.html)

代理模式(Proxy Pattern)

     

      代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接

 

口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及

 

事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与

 

一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托

 

类的对象的相关方法,来提供特定的服务。

 

      

 

      随着Proxy的流行,Sun把它纳入到JDK1.3实现了Java的动态代理。动态代

 

理和普通的代理模式的区别,就是动态代理中的代理类是由

 

java.lang.reflect.Proxy类在运行期时根据接口定义,采用Java反射功能动态生

 

成的。和 java.lang.reflect.InvocationHandler结合,可以加强现有类的方法

 

实现。自定义Handler实现 InvocationHandler接口,自定义Handler实例化

 

时,将实现类传入自定义Handler对象。自定义Handler需要实现 invoke方法,

 

该方法可以使用Java反射调用实现类的实现的方法,同时当然可以实现其他功

 

能,例如在调用实现类方法前后加入Log。而Proxy类根据Handler和需要代理的

 

接口动态生成一个接口实现类的对象。当用户调用这个动态生成的实现类时,实际

 

上是调用了自定义Handler的 invoke方法。

 

 

package proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
class Logic{
public void logic(){
Dao dao = Factory.create();
System.out.println("dynamic proxy's name: "+dao.getClass().getName());
dao.insert();
}
}
class Factory{
static Dao create(){
Dao dao = new JdbcDao();
MyInvocationHandler hand = new MyInvocationHandler();
return (Dao)hand.get(dao);
}
}
interface Dao{
public void update();
public void insert();
}
class JdbcDao implements Dao{
public void update(){
System.out.println("in jdbc update");
}
public void insert(){
System.out.println("in jdbc insert");
}
}
class HibernateDao implements Dao{
public void update(){
System.out.println("in hibernate update");
}
public void insert(){
System.out.println("in hibernate insert");
}
}
class MyInvocationHandler implements InvocationHandler {
Object o;
public Object get(Object o){
System.out.println("in get method of MyInvocationHandler");
this.o = o;
return Proxy.newProxyInstance(o.getClass().getClassLoader(),o.getClass().getInterfaces(),this);
}
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
System.out.println("write log before invoke");
Object result = arg1.invoke(o, arg2);
System.out.println("write log after invoke");
return result;
}
}
public class Test {
public static void main(String[] args) {
Logic l = new Logic();
l.logic();
}
}

 

    

 

 

 

分享到:
评论

相关推荐

    Nginx之proxy_redirect使用详解

    在学习和使用proxy_redirect指令时,必须了解其正则表达式的使用,这样才能精确控制URL的重写规则。正则表达式能够帮助我们提取或忽略URL路径中的某些部分,实现更灵活的重定向处理。此外,我们还要注意Nginx的版本...

    influx-proxy-2.5.7-linux-amd64.tar.gz

    了解Influx-proxy的工作原理和配置方式对于优化InfluxDB环境至关重要。在实际应用中,合理利用Influx-proxy可以显著提升系统效率,确保服务的稳定性和响应速度。因此,深入理解并熟练掌握InfluxDB和Influx-proxy的...

    Petalinux dma-proxy.已测可用,注意参数一致

    在嵌入式系统开发领域,Petalinux 是...在实际应用中,开发者需要仔细阅读Petalinux的文档,了解如何配置和使用dma-proxy,同时结合`dma-proxy-test.c`进行调试,以确保所有参数设置正确无误,达到预期的性能和稳定性。

    phpproxy-0.6

    《PHPProxy:构建高效直接代理服务的利器》 在当今互联网世界中,代理服务作为一种重要的网络工具,被广泛应用于数据抓取、网络...在使用过程中,用户应充分了解其优点和局限,合理规划应用场景,以发挥其最大价值。

    3proxy-0.6.1

    《3proxy-0.6.1:一个全能的网络代理...了解并掌握 3proxy 的各项功能和配置方法,对于提高网络安全性和管理效率具有重要意义。在使用过程中,充分利用提供的文档资源,将有助于用户更好地利用 3proxy 实现其网络需求。

    csapp proxylab

    总结来说,CSAPP Proxylab是一个极好的实践平台,它使我们有机会深入了解网络代理的工作原理,强化网络编程技能,同时也锻炼了问题解决和调试能力。只有深入理解每一个细节,才能编写出稳定、高效的网络代理程序。

    ngx_http_proxy_connect_module.zip

    首先,我们来了解Nginx的基本架构。Nginx是一款高性能的Web服务器和反向代理服务器,以其高效的并发处理能力、低内存占用和丰富的模块库而著名。它的工作模式基于事件驱动,可以高效地处理大量的连接请求,特别适合...

    ProxyPool.zip

    了解并掌握ProxyPool的工作原理和实现细节,可以帮助我们构建自己的代理IP服务,提高网络任务的执行效率和成功率,同时降低被目标网站封锁的风险。对于从事网络爬虫、数据分析或安全测试的开发者来说,ProxyPool是一...

    proxy代理程序实例和讲解

    首先,让我们了解这个示例程序的基本结构。该程序接收三个参数:`proxy_port`、`remote_host`和`service_port`。`proxy_port`是本地代理服务器监听的端口,`remote_host`是要连接的远程主机的名称或IP地址,`service...

    mysql-proxy

    用户可以查看连接状态、请求处理时间、错误信息等,以便了解Proxy的工作情况,并据此进行调整优化。 **安全性** 虽然MySQL Proxy提供了一定的性能优化和负载均衡能力,但安全仍然是用户需要关注的重点。使用Proxy...

    maven配置proxy和archetype

    【标题】"maven配置proxy和archetype"涉及的是在使用Maven构建Java项目时,如何设置代理服务器(proxy)和创建项目模板(archetype)的相关知识。...了解并正确配置这两个部分,将极大提升开发效率。

    使用angel proxy 的 客户端脚本(目前只支持php)

    首先,我们需要了解Angel Proxy的基本概念。Angel Proxy是一款高性能的代理服务,它为开发者提供了API接口,可以方便地集成到各种应用中,尤其是PHP项目。使用Angel Proxy,开发者可以通过设置代理IP来隐藏真实的IP...

    charles-proxy-4.6.5-win64

    Charles Proxy是一款广泛使用的网络代理(HTTP Proxy / HTTP Monitor)工具,它允许...带宽限制:通过模拟慢速网络连接,比如EDGE或3G网络,Charles可以帮助开发者了解他们的应用在这些环境下的表现,以优化性能。

    spring proxy代理模仿

    首先,让我们了解代理模式的基本概念。代理模式是一种设计模式,它为一个对象提供一个代理以控制对该对象的访问。在Spring AOP中,有两种类型的代理:JDK动态代理和CGLIB代理。 1. JDK动态代理:当目标对象实现了...

    Android Httpclient Proxy Test

    首先,了解`HttpClient`是Apache的一个开源库,它提供了一个强大的、功能丰富的HTTP客户端API,使得开发者可以方便地发送HTTP请求并处理响应。在Android API 19(KitKat)及以下版本,HttpClient是内置支持的,但在...

    IGMP proxy源代码

    - **网络协议解析**:了解如何解析和构建网络协议报文,这对于网络编程和调试非常有用。 - **网络路由和转发**:熟悉多播流量的路由机制,以及如何在不同网络环境中有效地转发数据。 - **性能优化**:学习如何减少...

    windows++mysql-proxy全部数据包

    首先,让我们详细了解MySQL Proxy。MySQL Proxy是一款轻量级的中间件,它能够监控、分析或修改在客户端和MySQL服务器之间传输的数据流。通过这个代理,你可以实现负载均衡、故障切换、SQL审计、性能监控等功能,对...

    了解一下web proxy的基本概念

    http proxy forward proxy reverse proxy

    设置Proxy Server和SQL Server实现互联网上数据库的安全

    在设置Proxy Server与SQL Server之前,我们需要先了解这两者之间的关系以及它们在数据传输过程中的作用: 1. **Proxy Server**:它充当客户端与SQL Server之间的中介,负责转发请求和响应。通过使用Proxy Server,...

    cas-proxy认证

    通过本文档的学习,我们可以了解到 CAS-Proxy 认证是一种高效且安全的单点登录解决方案,尤其适用于需要跨多个后端服务进行认证的复杂应用场景。通过对 CAS-Proxy 认证的基本原理、配置方法以及实践案例的深入理解,...

Global site tag (gtag.js) - Google Analytics