????????
?????????????hadoop??RPC???????hadoop?У?DataNode??NameNode????????????????????RPC????????????????????????java NIO??????DataNode??????????NameNode???????????????NameNode????????????????????hadoop??RPC????????????????????????????????????????????????????????????????????ɡ?
???????????£?
package cn.xiaolu;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* ?????????????????????InvocationHandler???????????Proxy ????????????????????????????????
* ????????????????
* ???????????????????? ???????????д????????????????????????????????????????????????????????????????????????
* ????????????????????????????????????????????????????????????????????????????????????д????????
* InvocationHandler ?????????invoke?????????????Proxy?????????newProxyInstance?????????????????????????????????????????????????
* ??????????????????????Handler?????′????е?Invoker???????????????????????????????????о???????????t????????????????????????~
*/
//?????
interface AbstractClass {
public void show();
}
// ??????A
class ClassA implements AbstractClass {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("????A??");
}
}
// ??????B
class ClassB implements AbstractClass {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("????B??");
}
}
//????????????InvocationHandler???
class Invoker implements InvocationHandler {
AbstractClass ac;
public Invoker(AbstractClass ac) {
this.ac = ac;
}
@Override
public Object invoke(Object proxy?? Method method?? Object[] arg)
throws Throwable {
//?????????????Щ????
method.invoke(ac?? arg);
//???????????????Щ????
return null;
}
}
/**
* ??????
* @author С·
*/
class DynamicProxyTest {
public static void main(String[] args) {
//??????????ClassB????????
Invoker invoker1=new Invoker(new ClassA());
//??t?????ClassA?????
AbstractClass ac1 = (AbstractClass) Proxy.newProxyInstance(
AbstractClass.class.getClassLoader()??
new Class[] { AbstractClass.class }?? invoker1);
//????ClassA??show??????
ac1.show();
//??????????ClassB????????
Invoker invoker2=new Invoker(new ClassB());
//??t?????ClassB?????
AbstractClass ac2 = (AbstractClass) Proxy.newProxyInstance(
AbstractClass.class.getClassLoader()??
new Class[] { AbstractClass.class }?? invoker2);
//????ClassB??show??????
ac2.show();
}
}
???????????к???????£?
????????A??
????????B??