- 浏览: 443083 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (158)
- J2SE (15)
- c/c++ (17)
- linux & ubuntu (20)
- js (18)
- algorithm (21)
- android (1)
- software (3)
- svn (1)
- db (6)
- other (19)
- css (5)
- go (1)
- html 5 (3)
- computer science (1)
- php (3)
- 创业 (8)
- EJB & jboss (1)
- TDD (1)
- jsp & servlet (2)
- http, tcp & ip (2)
- hibernate (1)
- json (1)
- 乐 (2)
- ps (2)
- netbeans (1)
- extjs (2)
- eclipse (4)
- 项目管理 (1)
- varnish (2)
- study abroad (1)
- python (1)
- erlang (1)
- math (1)
- shell (1)
- assembly (4)
- lucene (1)
- web (1)
- http (1)
- tcp & ip (1)
最新评论
-
yiguxianyun:
...
css li 不换行 -
stdayong:
...
netbeans 中使用 maven -
程序猿_星:
为啥会中文乱码啊
servlet 以 gzip 格式返回数据 -
huanhuan519:
感谢分享~
gdb 调试工具 -
heyl1234:
写过些js,对css还不熟。谢谢~
css li 不换行
Java proxy
proxy, a design pattern base on reflect, it handle method invocation on object with a proxy instance,
------
class & interface
include:
* java.lang.reflect.Proxy
help to create proxy instance,
* java.lang.reflect.InvocationHandler
implement it to specify the proxy logic,
------
create & use a proxy
steps:
* pre-step:
* create the proxyed interface
* create the proxyed class implements the proxyed interface
*
* create a class implement InvocateHandler,
do:
* provide a field which is the proxyed object,
* provide a bind method(e.g. bind()), pass the proxyed object as param, and call Proxy.newProxyInstance() to create & return a proxy instance,
* implement the invoke() method, it call the method and return the return value, also do some other logic as you wish,
* get proxy instance
create an instance of the class that implement InvocateHandler,
and call the bind method with a proxyed object as param, to get a proxy instance,
cast the proxy instance to type that is one of the proxyed object's interface,
* call method with proxy instance
just the same as call on the proxyed object,
*
------
proxy & interface
proxy instance must be cast to an interface type, but not the class itself or it's superclass,
and all method to be invode via proxy, must be declared in the interface,
this is because Proxy.newProxyInstance's second param accept only interface, typically we use Class.getInterfaces() to pass the param,
------
code
IHello.java
package eric.j2se.proxy; /** * interface for proxyed class * * @author eric * @date Dec 7, 2012 6:07:36 PM */ public interface IHello { public void hello(String name); }
Hello.java
package eric.j2se.proxy; /** * proxyed class * * @author eric * @date Dec 7, 2012 6:07:49 PM */ public class Hello implements IHello { @Override public void hello(String name) { System.out.printf("hello, %s!\n", name); } }
TimerProxy.java
package eric.j2se.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import org.apache.log4j.Logger; /** * a proxy that help to logging method execution time * <p> * <b>how to use</b>: * <p> * <b>way one</b>: create an instance of this class, and call bind() with the object to be proxyed, and get a proxy instance, cast the return value of bind() to * a type that is one of the interfaces of the proxyed object, then call on the proxy instance, * * <pre> * e.g: * IHello hello = (IHello) new TimerProxy().bind(new Hello()); * hello.hello("eric"); * </pre> * <p> * <b>way two</b>: static getProxy() is a simpler way to use, underling it use way one, * * <pre> * e.g: * IHello hello = TimerProxy.getProxy(new Hello(), IHello.class); * hello.hello("eric"); * </pre> * * </p> * * @author eric * @date Dec 7, 2012 4:14:27 PM */ public class TimerProxy implements InvocationHandler { private Object obj; // the object to be proxyed private static Logger logger = Logger.getLogger(TimerProxy.class); /** * create a proxy instance * * @param obj * the object to be proxyed * @return the proxy instance */ public Object bind(Object obj) { this.obj = obj; return Proxy.newProxyInstance(this.obj.getClass().getClassLoader(), this.obj.getClass().getInterfaces(), this); } /** * get a proxy instance * * @param obj * @return */ public static Object getProxy(Object obj) { return new TimerProxy().bind(obj); } /** * get a proxy instance, and cast to specified type, * * @param obj * @return */ @SuppressWarnings("unchecked") public static <T> T getProxy(Object obj, Class<T> clazz) { return (T) (getProxy(obj)); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; long start = System.currentTimeMillis(); result = method.invoke(this.obj, args); logger.info(method.getDeclaringClass().getName() + "." + method.getName() + "() called, during " + (System.currentTimeMillis() - start) + " milliseconds."); return result; } }
ProxyTest.java
package eric.j2se.proxy; /** * proxy test * * @author eric * @date Dec 7, 2012 4:11:03 PM */ public class ProxyTest { public static void main(String[] args) { // test(); test2(); } public static void test() { IHello hello = (IHello) new TimerProxy().bind(new Hello()); hello.hello("eric"); } public static void test2() { IHello hello = TimerProxy.getProxy(new Hello(), IHello.class); hello.hello("eric"); } }
------
发表评论
-
java: lib & classpath
2014-08-21 10:14 1128classpath, is the path to searc ... -
Scan classes with specified annotation under specified package
2014-08-05 13:41 2352Scan classes with specified a ... -
http - simple server & client
2014-01-10 11:53 3504Simple http server & clien ... -
Java lock & condition
2012-08-14 23:49 3310java Lock & Condition, p ... -
java udp 简单实现
2011-02-20 18:36 10210java udp 简单实现 ------ 代码: ... -
java 文件统计 工具类
2011-02-18 23:55 1398import java.io.File; import ... -
udp 简单使用
2010-10-15 01:11 1911udp 概述 user datagram pro ... -
String StringBuilder StringBuffer "..." 4种的效率
2010-08-31 21:53 1510"..." +"..." ... -
统计 某目录下 文件中的 字符
2010-08-30 06:14 1146统计给定目录下,所有文件中的 行数、空格数、数字个数: ... -
多线程 通过 公共数据区 协调运行
2010-08-30 04:52 720多线程 通过 公共数据区 协调运行: 每个线程打印同1 ... -
面试题 - 刁钻
2010-08-28 11:34 1186记录下 遇到的 一些 刁钻 面试题: 嘿嘿 i++ & ... -
JDK版本不一样导致WTP项目错误
2010-04-08 11:06 1046转载自:http://xucons.iteye.com/blo ... -
class init & object creation
2010-03-19 13:31 909class init & object creatio ... -
String 中 equals() vs ==
2009-08-16 18:02 1089String 中的 equals() 和 == : equa ...
相关推荐
在这个“java proxy demo”中,我们将深入探讨如何利用Sun JDK API来创建和使用Java动态代理。 首先,我们要了解Java代理的基本概念。Java代理分为静态代理和动态代理两种。静态代理是在编译时就已经确定代理类的...
Java ProxyServer是一个基于Java实现的代理服务器类,它在客户端和服务器之间起到了中继的作用,允许数据在两者间传输。代理服务器在计算机网络中的主要功能是提供代理服务,它可以隐藏客户端的真实身份,增加网络...
Java中的动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。动态代理可以在运行时创建一个实现一组给定接口的新类,而无需知道实际的目标对象。代理类是在运行时动态...
在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类是用于创建一个代理对象,而InvocationHandler接口则定义了代理对象调用方法时的行为。 1. **...
Java的Proxy机制是Java反射API的一部分,主要用于创建动态代理类和动态代理对象。它允许我们在运行时创建一个实现了特定接口的新类,这个新类的行为由我们提供的InvocationHandler对象控制。以下是对Java Proxy机制...
Java Proxy 机制是Java语言提供的一种动态代理功能,允许我们在运行时创建一个新的类,这个类可以实现一组指定的接口,并且在方法调用时插入自定义的行为。这主要通过`java.lang.reflect.Proxy`类和`java.lang....
标题中的“从房屋买卖看 java proxy 模式”暗示了我们将通过一个具体的场景来探讨 Java 中的代理(Proxy)模式。在软件设计中,代理模式是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在...
在标题“JavaProxy Demo”中提到的,这是一个展示Java动态代理功能的示例程序。动态代理通常用于实现AOP(面向切面编程)或者在不修改目标对象的情况下增加额外的功能,比如日志、事务管理、性能监控等。 在Java中...
Java实现HTTP PROXY是一个常见的需求,特别是在开发网络应用或者测试环境中,我们可能需要通过代理服务器转发HTTP请求。本文将深入探讨如何使用Java编程语言来创建一个HTTP代理服务器,并且会涉及相关的源码分析。 ...
Java Proxy机制详细解读 Java Proxy机制是Java语言中的一种设计模式,主要用于将对象的调用行为与实现解耦,提供了一个代理对象,使得外界无法直接访问目标对象,从而提高了系统的灵活性和可维护性。 Proxy机制的...
**proxy.jsp** 是一个用Java编写的代理页面,适用于Java服务器环境,如Tomcat。它通过设置`esri.config.defaults.io.proxyUrl`来指定代理服务的URL,当ArcGIS JavaScript API请求需要跨域访问的资源时,会自动通过这...
NULL 博文链接:https://lgr310-163-com.iteye.com/blog/686040
1. **Java Proxy Class**: Java的`java.lang.reflect.Proxy`类是动态代理的基石。它允许我们在运行时创建一个新的类,这个类可以作为其他接口的实现,这样我们就可以在调用接口方法时插入自定义的行为。在这个`java_...
在Java中,我们可以使用`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。`Proxy`类用于创建代理对象,`InvocationHandler`接口定义了代理对象方法调用的处理逻辑。在"DynamicProxy...
我自己用eclipse写的java代码,可以直接用eclipse导入,也可以直接用java -jar proxy_sample.jar执行 代码量很小,尽量通过注释进行说明 本例实现了InvocationHandler接口,代码具有典型性 在研究代理模式(Proxy...
一个用来分析使用HTTP和HTTPS协议的应用程序框架 它的原理很简单,WebScarab记录它检测到的会话内容(请求和应答),使用者可以通过多种形式来查看记录。...也可以用它来调试程序中较难处理的 bug,也可以帮助安全...
JAVA 通过proxy代理方式访问internet资源,
Java 实现免费代理IP的获取方式 并动态实时校验是否有效,java文件项目内含有Jsoup的Jar包(Jsoup是加工过的,含请求),有2个主入口程序: 其一:用于请求代理IP,并立即校验是否是一个有效的代理IP,如果有效,...
JdkProxy.java