MapReduce基礎篇-動態代理
阿新 • • 發佈:2019-01-26
對於MapReduce我已經看完有一段時間了,一直沒有寫這個後續是覺得對於這個自己還是理解的不太深,不敢隨便的就寫了,誤人子弟,我今天把這個寫出來也不是說對於RPC中使用的動態代理的理念有多深的理解的,只是基於自己對專案的理解,然後寫出來,和大家分享一下自己的想法,希望有什麼理解不到位的,一起探討。
RPC是java中實現服務之間通訊而提出來的,是RMI的一種吧,服務之間的通訊有很多種,我這裡就不詳細的說了。我直接說一下RPC,它是對java應用程式,不同的JVM,而實現的遠端過程呼叫,最主要的是JVM不同,我相信瞭解JVM的都知道這是什麼意思。那麼RPC實現的原理是什麼呢?我們能想到的是這樣的,要想兩個服務之間通訊,首先想到的是Socket,而我們通訊的是Java物件,所以要序列化。然而我們要想使物件在伺服器端也像在client一樣,因為JVM不一樣了,是不是要把類也要傳送過去?那這樣太麻煩了,我們想到了面向介面程式設計,我們只需要有介面就好了,那麼怎麼呼叫呢?我們想到了動態代理,而且是面向介面的,這是我在理解RPC時,自己能想到的。我想應該也是差不多了。那麼具體動態代理的原理我下面給出示例程式,我相信大家很簡單的就會看明白是怎麼一回事了啊。
public interface ChinaMobile {
void regist();
}
public class ChinaMobileImp implements ChinaMobile {
@Override
public void regist() {
System.out.println("success...");
}
}
public class ChinaMobileAgent implements InvocationHandler {
private ChinaMobile chinaMobile;
public ChinaMobileAgent(ChinaMobile chinaMobile) {
this.chinaMobile = chinaMobile;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("proxy success....");
return method.invoke(chinaMobile, args);
}
}
public class test {
public static void main(String[] args) {
ChinaMobile ch = new ChinaMobileImp();
ChinaMobileAgent agent = new ChinaMobileAgent(ch);
ChinaMobile proxy = (ChinaMobile)Proxy.newProxyInstance(ch.getClass().getClassLoader(), ch.getClass().getInterfaces(), agent);
proxy.regist();
}
}
以上就是我對RPC中使用動態代理的理解有什麼理解不到位的,希望批評指正。