Java程序開發(fā)中代理技術(shù)的使用方法

字號:

如果你這樣的需求:在運行時創(chuàng)建實現(xiàn)一組給定接口的類,注意這個類是在運行時創(chuàng)建的,你就需要使用JAVA中的代理類來達成你的要求。
    代理類提供在運行時創(chuàng)建類的能力,這個新建的類能實現(xiàn)你指定的接口。 當(dāng)然你不能在運行時為要實現(xiàn)的接口中的方法定義新代碼,而是提供一個調(diào)用處理器來實現(xiàn)。調(diào)用處理器是實現(xiàn)了InvocationHandler接口的類的對象,此接口只有一個方法:
    以下是引用片段:
    Object invoke(Object proxy,Method mtd,Object[] args)
    其中proxy是代理對象;mtd是描述方法的類的對象,此對象執(zhí)行它的invoke(Object obj,Object[] args)方法可以調(diào)用封裝在Mthod對象中的方法;args是存儲了此方法參數(shù)的數(shù)組。
    建立代理對象:使用Proxy類的newProxyInstance方法,其格式如下:
    以下是引用片段:
    Object proxy=Proxy.newProxyInstance(null,interfaces,handler);
    其中第一個參數(shù)是一個類加載器,這里使用默認(rèn)加載器,用null表示;第二個參數(shù)是一個Class的數(shù)組,其每個元素是一個接口,這就是用來指定要實現(xiàn)的一組接口,哪怕只有一個接口也要通過數(shù)組來傳遞;第三個參數(shù)就是調(diào)用處理器。
    在代理對象上調(diào)用方法時,調(diào)用處理器的invoke方法會被自動調(diào)用,正在調(diào)用的方法和參數(shù)自動傳遞給inboke方法的jmtdt args形式參數(shù)中,同時也會用args參數(shù)數(shù)組中的參數(shù)去調(diào)用mtd對象中指定的方法。
    代理的應(yīng)用:方法調(diào)用跟蹤(把要跟蹤的對象包裝成代理類對象);為遠(yuǎn)程調(diào)用方法提供路由;用戶接口事件與動作關(guān)聯(lián)(C#中有類似的功能)。