Proxy 模式
代理的主要类:java.lang.reflect.Proxy
它定义了一套静态方法,供我们使用,其中一个最常用的方法就是生成代理对象,动态代理机制的核心是 InvocationHandler 接口
代理对象
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
它根据你传入的类加载器和这个代理将会实现的接口,以及一个调用处理器,来生成一个代理对象.
核心接口
public interface InvocationHandler {
Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;
}
请看例子:
接口1:
package com.ben.proxy;
/**
* <pre>
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public interface Talk
{
public void talk(String someone);
}
实现类1:
package com.ben.proxy;
/**
* <pre>
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public class MyTalk implements Talk
{
public void talk(String someone)
{
System.out.println("talk to "+someone);
}
}
接口2:
package com.ben.proxy;
/**
* <pre>
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public interface Write
{
public void hello(String name);
public void doAction();
}
实现类2:
package com.ben.proxy;
/**
* <pre>
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public class MyWrite implements Write
{
public void doAction()
{
System.out.println("doAction is done");
}
public void hello(String name)
{
System.out.println("hello !"+name);
}
}
动态代理:
package com.ben.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* <pre>
* 动态代理对象
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public class MyProxy<T> implements InvocationHandler
{
private T t;
public MyProxy(T t)
{
this.t = t;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
System.out.println("--------proxy:----" + proxy.getClass());
System.out.println("--------Method:---" + method);
System.out.println("--------args:-----" + args);
if (args != null)
{
for (Object o : args)
System.out.println("---------" + o);
}
return method.invoke(t, args);
}
}
将两个接口绑定到代理来调用,实现不同的事情。示例如下:
package com.ben.proxy;
import java.lang.reflect.Proxy;
/**
* <pre>
* 代理机制示例
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public class MyProxyFactory
{
private Object o;
public void bond(Object o)
{
this.o = o;
doSth();
}
public void doSth()
{
if (o instanceof Talk)
{
Talk t = (Talk) Proxy.newProxyInstance(Talk.class.getClassLoader(), new Class[] { Talk.class },
new MyProxy(o));
t.talk("ben");
}
if (o instanceof Write)
{
Write w = (Write) Proxy.newProxyInstance(Write.class.getClassLoader(), new Class[] { Write.class },
new MyProxy(o));
w.doAction();
w.hello("bensoft");
}
}
public static void main(String[] args)
{
Talk t = new MyTalk();
Write w = new MyWrite();
MyProxyFactory ft = new MyProxyFactory();
ft.bond(t);
ft.bond(w);
}
}
通过以上MyProxyFactory类的绑定,将多个接口要做的事情在一个类中即可实现。
分享到:
相关推荐
利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能 详细:http://blog.csdn.net/wq105032007067/article/details/8812598
利用Java的反射与代理实现IOC模式 在Java中,其反射和动态代理机制极其强大,我们可以通过其反 射机制在运行时获取信息。...在本文中,主要讲述的是用Java的反射机制实现IOC。下 面,让我们开始IOC之旅吧!
利用反射和动态代理机制实现自定义拦截器Interceptor http://blog.csdn.net/alanchen520/article/details/34087833
package com.gc.aop下为:aop方式... ... ... ... ... package com.gc.javaproxy下为:java代理机制实现 package com.gc.proxy下为:自定义代理模式(面向接口编程) package com.gc.normal下为:通用日志处理方式
模拟java动态代理实现机制
JAVA的反射机制与动态代理
使用动态代理,反射实现模拟实现ORM。使用数据库为MySQL5.0,开发环境为windows 10,Myeclipse10.6
java中动态代理的分析与实现。有详细的代码综合实例,适合学习。
本文通过分析Java动态代理的机制和特点,解读动态代理类的源代码,并且模拟推演了动态代理类的可能...Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地
通过详细的一个Proxy实例,详尽的讲解了JAVA动态代理的实现和一些基本知识。
利用java中的反射机制以及代理机制,实现了AOP。有详细的代码和实例
java动态代理的分析与实现。有详细的代码实例,适合学习。
基于java实现hessian进行服务器之间数据交互demo项目 实现功能: 1.基于spring 2.5.6+hessian3.1.6带有签名安全机制 2.基于servlet代理机制实现HessianServlet,进行简单IP地址校验功能!
Java高级程序设计 第3章 Java反射机制 3.1 应用场景 3.2 相关知识3.3 实施过程 3.4 ...对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象,总结如下。 优点:运行期类型的判断,
java中反射机制的分析,动态代理的分析与实现。有详细的代码实例,适合学习。
这个代码实现了一个简单的网络请求拦截器,使用了Java的动态代理机制。在这个例子中,我们创建了一个`HttpRequestInterceptor`类来实现`InvocationHandler`接口,并在`invoke()`方法中实现了对目标方法的拦截操作。...
aop思想的java代码实现。代码分三个部分,一个是不使用aop思想实现日志记录,一个是使用静态代理实现aop,最后是使用java 1.3之后的动态代理机制实现。
利用java中的反射机制和代理机制,实现IOC模式,有详细的代码和实例
在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。首先我们先来看看java的API帮助文档是怎么样对...
Java在JDK1.3后引入的动态代理机制,使我们可以在运行期动态的创建代理类。使用动态代理实现AOP需要有四个角色:被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口反射机制生成一个代理类...