1. 程式人生 > >MapReduce基礎篇-動態代理

MapReduce基礎篇-動態代理

對於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中使用動態代理的理解有什麼理解不到位的,希望批評指正。