1. com.cleversoft.demos.dynamicproxy.Subject.java:
package  com.cleversoft.demos.dynamicproxy;

public   interface  Subject  {
    
public void request();
}

2. com.cleversoft.demos.dynamicproxy.RealSubject.java:
package  com.cleversoft.demos.dynamicproxy;

public   class  RealSubject  implements  Subject  {
    
public RealSubject() {
    }


    
public void request() {
        System.out.println(
"From real subject.");
    }

}

3. com.cleversoft.demos.dynamicproxy.DynamicSubject.java:
动态代理类需要实现InvocationHandler接口,即需要实现invoke()方法。
package  com.cleversoft.demos.dynamicproxy;

import  java.lang.reflect.Method;
import  java.lang.reflect.InvocationHandler;

public   class  DynamicSubject  implements  InvocationHandler  {

    
private Object _obj;

    
public DynamicSubject() {
    }


    
public DynamicSubject(Object obj) {
        
this._obj = obj;
    }


    
public Object invoke(Object proxy, Method method, Object[] args)
            
throws Throwable {
        System.out.println(
"before calling " + method);
        method.invoke(_obj, args);
        System.out.println(
"after calling " + method);
        
return null;

    }


}

4. com.cleversoft.demos.dynamicproxy.Client.java:
package  com.cleversoft.demos.dynamicproxy;

import  java.lang.reflect.InvocationHandler;
import  java.lang.reflect.Proxy;

public   class  Client  {
    
static public void main(String[] args) throws Throwable {
        RealSubject rs 
= new RealSubject(); // 指定被代理类
        InvocationHandler ih = new DynamicSubject(rs); // 初始化代理类
        Class cls = rs.getClass();

        Subject subject 
= (Subject) Proxy.newProxyInstance(
                cls.getClassLoader(), cls.getInterfaces(), ih);
        subject.request();
    }

}


参考资料:
1. 《Java与模式》
2. http://dev.csdn.net/Develop/article/28/61250.shtm

欢迎大家访问我的个人网站 萌萌的IT人