`

proxy 的原理

 
阅读更多
设计模式中proxy模式可以在jdk中的proxy得到体现。
它也是spring的核心思想。

首先我定义个ActionPrettyWomanInterface 接口。
public interface ActionPrettyWomanInterface {
	void action();
}


针对于这个接口,我们可以有多个实现。
一个是帮助美女的实现。
public class HelpPrettyWoman implements ActionPrettyWomanInterface{
	public void action() {
		System.out.println("我在帮美女补丝袜 .");
	}
}

另一个是玩美女。
public class PlayPrettyWoman implements ActionPrettyWomanInterface{
public void action() {
System.out.println("我在玩美女.");
}
}


那么我们只是简单的玩,是不是太没情调了呢。
这时候我们就可以通过代理机制里的InvocationHandler加入一些情调。
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class SexyInvocationHandler implements InvocationHandler{
	private Object prettyWoman;
	public SexyInvocationHandler(ActionPrettyWomanInterface prettyWoman){
		this.prettyWoman=prettyWoman;
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result=null;
		try{
			System.out.println(proxy.getClass().getSimpleName());
			System.out.println("让美女穿上丝袜,剪开档.");
			result =method.invoke(prettyWoman, args);
			System.out.println("抽跟烟~~~.");
		}catch(Exception e){
		}
		return result;
	}

}



之后我们就可以大玩特玩了。
import java.lang.reflect.Proxy;
public class TestActionWithWoman {
	public static void main(String[] args) {
			ActionPrettyWomanInterface playWoman=new PlayPrettyWoman();
		ActionPrettyWomanInterface helpWoman=new HelpPrettyWoman();
		ActionPrettyWomanInterface fuckProxy=(ActionPrettyWomanInterface)Proxy.
		newProxyInstance(playWoman.getClass().getClassLoader(), playWoman.getClass().getInterfaces(), new SexyInvocationHandler(playWoman));
		fuckProxy.action();
		ActionPrettyWomanInterface remedyProxy=(ActionPrettyWomanInterface)Proxy.
		newProxyInstance(helpWoman.getClass().getClassLoader(), helpWoman.getClass().getInterfaces(), new SexyInvocationHandler(helpWoman));
		remedyProxy.action();
		System.out.println("fuckProxy classname:"+fuckProxy.getClass().getName());
	}
}


控制台输出:
引用
$Proxy0
让美女穿上丝袜,剪开档.
我在玩美女.
抽跟烟~~~.
$Proxy0
让美女穿上丝袜,剪开档.
我在帮美女补丝袜 .
抽跟烟~~~.
fuckProxy classname:$Proxy0


从中我们可以知道,当我们用代理机制创建关于接口或者类的对象时候,
它的对象实现是jdk产生的动态代理对象Proxy0。

当我们要调用玩美女或者帮助美女方法时候, 它的实际顺序是先调用InvocationHandler里的invoke, 然后invoke会通过反射调用玩美女或者帮助美女方法。


得出结论:如果我们不实现InvocationHandler的invoke方法,那么我们实际中的方法讲不会被调用到。所以这个类必须重写。

然后另外我们可以得知,创建对象除了new以后,还可以通过代理实现。
分享到:
评论
1 楼 aqqcat 2013-07-03  
这个太骚了同志

相关推荐

    Proxy原理说明的源码

    Proxy原理说明的源码

    igmp proxy

    一、IGMP的基本概念与工作原理 1. IGMP协议版本:目前存在IGMPv1、IGMPv2和IGMPv3三个版本,其中v1和v2主要关注加入和离开组播组,v3增加了对源选择的支持。 2. 组播组:由多个接收者组成的逻辑集合,每个接收者都...

    救活HiSuite Proxy的方法.docx

    1. **理解HiSuite Proxy原理**: - HiSuite Proxy是一种允许用户通过代理服务器来操作手机固件的工具,主要用于降级等场景。 - 正常情况下,用户通过HiSuite连接手机后,可以从华为的官方服务器下载相应的固件进行...

    rest-proxy主要API总结.docx

    `kafka-rest-proxy` 是一个重要的工具,它提供了一个RESTful接口来与Apache Kafka集群交互。这个工具使得非Java客户端可以方便地使用HTTP协议来生产和消费Kafka消息,无需直接集成Kafka的Java客户端库。以下是对`...

    Proxy Server(代理服务器)

    代理服务器的源程序,只是一个示范,可以了解Proxy原理 program: proxyd module: proxyd.c summary: provides proxy tcp service for a host on an isolated network. programmer: Carl Harris ...

    Java动态代理语法Proxy类原理详解

    "Java动态代理语法Proxy类原理详解" Java动态代理语法Proxy类原理详解是Java语言中的一种非常重要的语法机制,它可以动态地生成代理对象,从而对目标对象进行增强和修改。本文将详细介绍Java动态代理语法Proxy类...

    proxy.jsp、proxy.ashx、proxy.php、proxy.config

    同时,理解代理服务的工作原理,如如何处理请求和响应,以及如何在客户端和服务器端进行交互,对于开发和维护GIS应用至关重要。 在资源包`resource-proxy-1.0`中,可能包含了这些代理服务的源代码、配置示例以及...

    Digoal.Zhou-PostgreSQL-PLProxy原理与实践.pptx

    **PostgreSQL PL/Proxy原理与实践** PostgreSQL PL/Proxy是一种用于PostgreSQL数据库的轻量级分布式查询代理,设计用于解决大数据量、高并发读写请求以及提高数据库系统的可扩展性问题。它允许用户将数据库操作分布...

    ABAP 调用ABAP PROXY

    接下来,我们将深入探讨这个主题,包括ABAP Proxy的原理、创建过程以及调用方法。 ### ABAP Proxy简介 ABAP Proxy是SAP NetWeaver平台的一部分,它提供了一种灵活且可靠的通讯方式,特别是在分布式应用系统中。...

    goproxy-android snail007/goproxy全能代理服务器安卓版

    本文将详细介绍GoProxy-Android的核心概念、工作原理以及如何在Android Studio环境下进行开发和应用。 一、GoProxy-Android的核心概念 1. Go语言与GoProxy:GoProxy基于Go语言构建,Go语言以其高效的性能和强大的...

    Proxy Server 代理服务器的源程序

    代理服务器的源程序,只是一个示范,可以了解Proxy原理

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

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

    3proxy-0.6.1

    "doc" 目录可能包含了更详细的用户文档、技术手册或者FAQ,这些资料可以帮助用户深入理解 3proxy 的工作原理和高级特性,解决使用过程中遇到的问题。 总的来说,3proxy-0.6.1 提供了一个全面的网络代理解决方案,...

    ngx_http_proxy_connect_module.zip

    ngx_http_proxy_connect_module是一个针对Nginx服务器的第三方模块,主要功能是支持HTTP代理的"CONNECT"方法。... 首先,我们来了解Nginx的...在部署和使用时,必须充分理解其工作原理和潜在风险,并采取必要的安全措施。

    csapp proxylab

    本文将详细探讨Proxylab的核心概念、实现原理以及可能遇到的挑战。 网络代理,顾名思义,是作为客户端和服务器之间的一个中介,它接收客户端的请求,转发到目标服务器,并将响应返回给客户端。在Proxylab中,我们...

    ProxyPool.zip

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

    nginx系列(十)nginx缓存代理proxy_cacahe和CDN实现的原理

    “nginx系列(十)nginx缓存代理proxy_cache和CDN实现的原理”这个标题揭示了本文将探讨的主题,主要集中在两个关键点上:一是Nginx的缓存代理机制proxy_cache,二是如何利用Nginx实现内容分发网络(CDN)的功能。...

    proxy代理程序实例和讲解

    这个代理程序的工作原理是创建一个服务器,监听`proxy_port`,当有客户端连接时,它会建立到`remote_host`的`service_port`的连接,并在两者之间转发数据,从而使得客户端可以通过代理服务器访问远程服务。...

Global site tag (gtag.js) - Google Analytics