[size=large]代码例子:[/size]
package com.test;
/**
* 一个真实的接口
* @author yale
*
*/
public interface ISubject
{
public void request();
}
package com.test;
/**
* 一个真实的对象
* @author yale
*
*/
public class RealSubject implements ISubject
{
public void request()
{
System.out.println("real subject request");
}
}
package com.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 一个动态代理对象,实现InvocationHandler
* @author yale
*
*/
public class DynamicSubject implements InvocationHandler
{
private Object obj;//被代理的对象
public DynamicSubject(Object o)
{
this.obj = o;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
System.out.println("before request");
method.invoke(obj,args);
System.out.println("after request");
return null;
}
}
package com.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
/**
* 调用测试
*
* @author yale
*
*/
public class Client
{
public static void main(String[] args)
{
RealSubject realSubject = new RealSubject();
InvocationHandler handler = new DynamicSubject(realSubject);
Class<?> classType = handler.getClass();
ISubject subject = (ISubject) Proxy.newProxyInstance(classType
.getClassLoader(), realSubject.getClass().getInterfaces(),
handler);
subject.request();
}
}
本文介绍了一个使用Java实现的动态代理示例。通过定义一个真实接口和实现类,再结合动态代理对象,展示了如何利用Java反射机制创建代理实例,并在调用方法前后添加额外的功能。
125

被折叠的 条评论
为什么被折叠?



