`
wangjianjun852
  • 浏览: 49841 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

proxy --- 4

阅读更多
----client---
package com.wjj.myproxy;

import com.wjj.proxy.Car;


public class Client {
public static void main(String[] args) {
try {
Moveable car = new Car();
InvocationHandler h = new LogIH(car);
Moveable ca = (Moveable)Proxya.getProxy(Moveable.class,h);
ca.move();
} catch (Exception e) {
e.printStackTrace();
}
}
}


------proxy ---
package com.wjj.myproxy;

import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;

import com.wjj.proxy.Car;


public class Proxya {
public static Object getProxy(Class proxyinterface,InvocationHandler h)throws Exception{

Method[] methods = proxyinterface.getMethods();
String methodStr = "";

for(Method m : methods){
methodStr += "@Override\r\n";
methodStr +="public void " + m.getName() + "(){\r\n" +
"try{"+
"Method md = " + proxyinterface.getName() + ".class.getMethod(\"" + m.getName() + "\");\r\n"+
"h.invoke(this,md);\r\n" +
"}catch(Exception e){e.printStackTrace();\r\n}"+

"}";
}


String src = "package com.wjj.myproxy;\r\n"+
"import java.lang.reflect.Method;"+

"public class CarTimeProxy implements "+proxyinterface.getName()+" {"+

"com.wjj.myproxy.InvocationHandler h = null;"+


"public CarTimeProxy(InvocationHandler car) {"+
"super();"+
"this.h = car;"+
"}"+methodStr+

"}";

String fileName = System.getProperty("user.dir") +"/src/com/wjj/myproxy/CarTimeProxy.java";

File file = new File(fileName);
FileWriter writer = new FileWriter(file);
writer.write(src);
writer.flush();
writer.close();

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);
Iterable units = fileMgr.getJavaFileObjects(fileName);
CompilationTask t = compiler.getTask(null, fileMgr, null, null, null, units);
t.call();
fileMgr.close();


URL[] urls = new URL[]{new URL("file:/" + System.getProperty("user.dir")+"/src")};
URLClassLoader ul = new URLClassLoader(urls);
Class clazz = ul.loadClass("com.wjj.myproxy.CarTimeProxy");
System.out.println(clazz);


Constructor cos = clazz.getConstructor(InvocationHandler.class);
return cos.newInstance(h);
}
}


-------------------moveable ---
package com.wjj.myproxy;

public interface Moveable {
void move();
}


---------------------invocation---
package com.wjj.myproxy;

import java.lang.reflect.Method;

public interface InvocationHandler {
public void invoke(Object o,Method m);
}



-----------invocatin impl----
package com.wjj.myproxy;

import java.lang.reflect.Method;

public class LogIH implements InvocationHandler {

private Object target;

public LogIH(Object o){
this.target = o;
}


@Override
public void invoke(Object o, Method m) {

try {
System.out.println("invocate log start--------->");
long startTime = System.currentTimeMillis();
m.invoke(target, new Object[]{});
System.out.println("invocate log stop--------->");
System.out.println(System.currentTimeMillis() - startTime);
} catch (Exception e) {
e.printStackTrace();
}
}

}



=========================

这样就 可以对任意对象,实现任意方法的代理, 其代理内写的方法, 就可以自己建一个invocationhandler 的实现类。
分享到:
评论

相关推荐

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

    本文将详细探讨InfluxDB的核心特性和Influx-proxy的功能,并结合"Influx-proxy-2.5.7-linux-amd64.tar.gz"这个压缩包文件,解析其在Linux AMD64平台上可能的部署与使用。 首先,InfluxDB以其高效的存储和查询机制而...

    ios-webkit-debug-proxy-1.9.0-win64-bin

    ios-webkit-debug-proxy-1.9.0-win64-bin

    charles-proxy-4.5.6-win64

    charles 解压就能用 charles-proxy-4.5.6-win64

    Node.js-http-proxy-middleware用于把请求代理转发到其他服务器的中间件

    4. **错误处理**:当代理过程中发生错误时,`http-proxy-middleware` 提供了错误处理机制,可以捕获并处理这些错误,避免应用程序崩溃。 5. **浏览器同步**:对于前端开发环境,`http-proxy-middleware` 可以与 ...

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

    《GoProxy-Android:全能代理服务器在安卓平台的应用与实现》 GoProxy-Android是由snail007/goproxy团队开发的一款适用于安卓系统的全能代理服务器应用。此项目旨在为移动设备提供强大的网络代理功能,使得用户能够...

    browsermob-proxy-2.1.4.zip

    browsermob-proxy-2.1.4,与selenium一起进行爬虫,获取network中的链接资源

    charles-proxy-4.5.6-win64.msi

    charles-proxy-4.5.6-win64.msi

    charles-proxy-ssl-proxying-certificate.pem

    charles-proxy-ssl-proxying-certificate.pem

    Proxy-SwitchyOmega-Chromium-2.5.15.zip

    Proxy-SwitchyOmega是一款强大的网络代理管理插件,专为Chromium浏览器(Chromium是Google Chrome浏览器的基础开源版本)设计。这款插件允许用户在不同的网络环境之间快速切换,包括HTTP、HTTPS、SOCKS4、SOCKS5等...

    mysql-proxy-0.8.5-windows-x86-32bit

    `mysql-proxy-0.8.5-windows-x86-34bit` 是 MySQL Proxy 的一个特定版本,适用于32位Windows操作系统。 MySQL Proxy 的主要功能和优势包括: 1. **透明代理**:MySQL Proxy 可以悄无声息地插入到客户端和服务器...

    Midjourney-Proxy-Plus-3.8.6免授权版

    MJ-PROXY-PLUS-3.8.6免授权,功能和商用版本相同,最新版本,由于MJ官网更新,老版本已无法使用MJ-PROXY-PLUS,安装方法和老版本一样,详细可参考MJ-PROXY-PLUS配置教程。 使用自己的MJ账号,支持GPT3.5自动翻译等。...

    node-https-proxy-agent, HTTPS端点的HTTP代理 `http.Agent` 实现.zip

    node-https-proxy-agent, HTTPS端点的HTTP代理 `http.Agent` 实现 https-proxy-agent HTTPS的HTTP代理 http.Agent 实现 这个模块为连接到指定的HTTP或者HTTPS代理服务器提供了 http.Agent 实现,并且可以与内置的...

    hadoop-yarn-server-web-proxy-2.6.0-API文档-中文版.zip

    赠送jar包:hadoop-yarn-server-web-proxy-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-web-proxy-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-web-proxy-2.6.0-sources.jar; 赠送Maven依赖信息文件:...

    browsermob-proxy-2.1.1-bin.zip

    browsermob-proxy-2.1.1-bin.zip

    docker-letsencrypt-nginx-proxy-companion-examples, 结合 Docker gen和 letsencrypt Nginx 代理伙伴的示例.zip

    docker-letsencrypt-nginx-proxy-companion-examples, 结合 Docker gen和 letsencrypt Nginx 代理伙伴的示例 docker-letsencrypt-nginx-proxy-companion-examples这个库是使用 nginx代理插件, docker gen和 docker-...

    win64 charles-proxy-4.6.3-win64.msi

    标题中提到的"win64 charles-proxy-4.6.3-win64.msi"是Charles Proxy的4.6.3版本,专为Windows 64位操作系统设计的安装包。描述中的“亲测、可用、可升级”意味着这个版本已经过实际测试,不仅能够稳定运行,而且...

    charles-proxy-4.6.2-win64.msi

    Charles(charles-proxy-4.6.2-win64.msi官方下载试用30天Windows 64位版本) 是在您自己的计算机上运行的 Web 代理(HTTP 代理/ HTTP 监视器)。然后,您的网络浏览器(或任何其他互联网应用程序)被配置为通过 ...

    Node.js代理中间件http-proxy-middleware.zip

    http-proxy-middleware 是一套 Node.js 代理中间件 for connect, express 和 browser-sync。安装$ npm install --save-dev http-proxy-middleware配置var proxyMiddleware = require('http-proxy-middleware'...

    Proxy-SwitchyOmega_v2.5.21.zip

    Proxy-SwitchyOmega是一款针对Chrome浏览器的扩展程序,主要用于网络代理管理和IP地址切换。这款插件对于需要频繁更换网络环境的用户,如开发者、网络测试人员或者需要访问不同地区服务的用户来说,非常实用。它允许...

    browsermob-proxy-2.1.4-bin.zip

    代理服务器 BrowserMob Proxy,BrowserMob Proxy 简称 BMP,可以这么说,BMP 绝对是为 Selenium 为生的,Selenium + BMP 的完美搭配,可以实现很多你绝对想象不出来的功能

Global site tag (gtag.js) - Google Analytics