1、第一步,创建被代理类的接口
package com.proxy;
public interface OriginInterface {
public void testProxy();
}
2、第二步,创建实现被代理类接口的实现类(需要代理的实际对象)
package com.proxy;
public class OriginImpl implements OriginInterface {
@Override
public void testProxy() {
System.out.println("test finish.");
}
}
3、处理器实现类,实现InvocationHandler接口,并且重写invoke方法。其中invoke方法的三个参数的含义分别是:
proxy:代理类的实例。
method:要执行的方法。
args:方法的参数。
package com.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import org.omg.CORBA.PRIVATE_MEMBER;
public class OriginProxy implements InvocationHandler {
private Object target;
public OriginProxy(OriginInterface target) {
super();
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("begin invoke method.");
Object result = method.invoke(target, args);
System.out.println("end invoke method.");
return result;
}
}
4、测试Demo。newProxyInstance方法传入的三个参数分别是,被代理类的类加载器、接口、以及处理器实现类(传入被代理类实例)。
package com.proxy;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args) {
OriginInterface target = new OriginImpl();
OriginInterface proxy = (OriginInterface) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new OriginProxy(target));
proxy.testProxy();
}
}
最后得到结果是:
begin invoke method.
test finish.
end invoke method.