`

java 代理机制实现

阅读更多

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类的绑定,将多个接口要做的事情在一个类中即可实现。
分享到:
评论
1 楼 crabboy 2009-07-15  
层次分明,看明白了。

相关推荐

    利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能

    利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能 详细:http://blog.csdn.net/wq105032007067/article/details/8812598

    利用Java的反射与代理实现IOC模式

    利用Java的反射与代理实现IOC模式 在Java中,其反射和动态代理机制极其强大,我们可以通过其反 射机制在运行时获取信息。...在本文中,主要讲述的是用Java的反射机制实现IOC。下 面,让我们开始IOC之旅吧!

    利用反射和动态代理机制实现自定义拦截器Interceptor

    利用反射和动态代理机制实现自定义拦截器Interceptor http://blog.csdn.net/alanchen520/article/details/34087833

    spring aop代理列子

    package com.gc.aop下为:aop方式... ... ... ... ... package com.gc.javaproxy下为:java代理机制实现 package com.gc.proxy下为:自定义代理模式(面向接口编程) package com.gc.normal下为:通用日志处理方式

    java动态代理模拟实现

    模拟java动态代理实现机制

    JAVA的反射机制与动态代理

    JAVA的反射机制与动态代理

    基于Java动态代理和反射机制实现ORM

    使用动态代理,反射实现模拟实现ORM。使用数据库为MySQL5.0,开发环境为windows 10,Myeclipse10.6

    java动态代理机制综合分析以及实现

    java中动态代理的分析与实现。有详细的代码综合实例,适合学习。

    Java动态代理机制分析及扩展

    本文通过分析Java动态代理的机制和特点,解读动态代理类的源代码,并且模拟推演了动态代理类的可能...Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地

    JAVA 动态代理机制

    通过详细的一个Proxy实例,详尽的讲解了JAVA动态代理的实现和一些基本知识。

    java反射与代理实现AOP

    利用java中的反射机制以及代理机制,实现了AOP。有详细的代码和实例

    java动态代理机制分析

    java动态代理的分析与实现。有详细的代码实例,适合学习。

    基于java的Hessian实现

    基于java实现hessian进行服务器之间数据交互demo项目 实现功能: 1.基于spring 2.5.6+hessian3.1.6带有签名安全机制 2.基于servlet代理机制实现HessianServlet,进行简单IP地址校验功能!

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    Java高级程序设计 第3章 Java反射机制 3.1 应用场景 3.2 相关知识3.3 实施过程 3.4 ...对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象,总结如下。 优点:运行期类型的判断,

    java反射机制与动态代理

    java中反射机制的分析,动态代理的分析与实现。有详细的代码实例,适合学习。

    使用Java动态代理实现一个简单的网络请求拦截器.txt

    这个代码实现了一个简单的网络请求拦截器,使用了Java的动态代理机制。在这个例子中,我们创建了一个`HttpRequestInterceptor`类来实现`InvocationHandler`接口,并在`invoke()`方法中实现了对目标方法的拦截操作。...

    aop思想的java实现

    aop思想的java代码实现。代码分三个部分,一个是不使用aop思想实现日志记录,一个是使用静态代理实现aop,最后是使用java 1.3之后的动态代理机制实现。

    java反射和代理实现IOC

    利用java中的反射机制和代理机制,实现IOC模式,有详细的代码和实例

    Java的动态代理机制详解

     在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。首先我们先来看看java的API帮助文档是怎么样对...

    AOP的实现机制

    Java在JDK1.3后引入的动态代理机制,使我们可以在运行期动态的创建代理类。使用动态代理实现AOP需要有四个角色:被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口反射机制生成一个代理类...

Global site tag (gtag.js) - Google Analytics