动态代理,转:http://langyu.iteye.com/blog/410071
动态代理可以让代理类来代理执行提供的接口方法,并在invocationHandler中反射执行真正实现的类。
例如在RPC中,可以让代理类代理RPC协议,然后让不同的实现类实现协议方法。
在这里贴个代理类的例子:
接口(协议):
public interface IHandler {
void dealWith(String someone);
int getResult();
String getOuter();
}
实现接口(协议类):
public class MyHandler implements IHandler{
private String someone;
private int num;
@Override
public void dealWith(String someone) {
num = new Random().nextInt(100);
this.someone = someone+num;
}
@Override
public int getResult() {
return num;
}
@Override
public String getOuter() {
return this.someone;
}
}
invocationHandler类:
public class MyHIvocationHandler implements InvocationHandler{
Object o;
public MyHIvocationHandler(Object o){
this.o = o;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("调用");
Object result = method.invoke(this.o, args);
System.out.println("结束");
return result;
}
}
最后是我的测试类:
public class ProxyTest {
@Test
public void testProxy(){
MyHandler h = new MyHandler();
MyHIvocationHandler ih = new MyHIvocationHandler(h);
IHandler i = (IHandler) Proxy.newProxyInstance(h.getClass().getClassLoader(), new Class[]{IHandler.class}, ih);
i.dealWith("dirk");
System.out.println(i.getResult());
System.out.println(i.getOuter());
}
}