本帖最后由 赵宇 于 2012-9-25 08:35 编辑
步骤
1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法
2.创建被代理的类以及接口
3.通过Proxy的静态方法
newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 创建一个代理
4.通过代理调用方法
具体实现例子
1.接口
public interface Subject
{
public void request();
}
2,真实角色
public class RealSubject implements Subject
{
@Override
public void request()
{
System.out.println("From real subject.");
}
}
3、
实现接口InvocationHandler的类,它实现invoke方法- ublic class DynamicSubject implements InvocationHandler
- {
- private Object sub;
- public DynamicSubject(Object obj)
- {
- this.sub = obj;
- }
- @Override
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable
- {
- System.out.println("before calling :" + method);
- method.invoke(sub,args);
- System.out.println("after calling :" + method);
- return null ;
- }
- }
复制代码 4.Client- public class Clent
- {
- public static void main(String[] args)
- {
- RealSubject realSubject = new RealSubject();
- InvocationHandler handler = new DynamicSubject(realSubject);
- Class<?> classType = handler.getClass();
- Subject subject = (Subject) Proxy.newProxyInstance(classType
- .getClassLoader(), realSubject.getClass().getInterfaces(),
- handler);
- subject.request();
- System.out.println(subject.getClass());
- }
- }
复制代码 综上所述 ,对动态代理的理解又上了一个台阶,希望对大家有帮助。
|