Java 2平臺(tái)1.3版本為Java映像API(Reflection API)增加了一個(gè)極其實(shí)用的擴(kuò)展:動(dòng)態(tài)代理類。一個(gè)動(dòng)態(tài)代理類就是一個(gè)實(shí)現(xiàn)了一系列運(yùn)行時(shí)指定的接口的類。這個(gè)代理可以象它真正實(shí)現(xiàn)了這些接口一樣使用。換句話說,可以直接在代理對(duì)象上調(diào)用任意接口的任意方法——當(dāng)然,必須先進(jìn)行必要的類型定型(casting)。由此,我們可以用動(dòng)態(tài)代理類為一組接口創(chuàng)建一個(gè)類型安全的代理對(duì)象,且不必象使用編譯時(shí)工具一樣預(yù)先生成代理(有關(guān)動(dòng)態(tài)代理類更詳細(xì)的說明,請(qǐng)參見本文最后的參考資源)。
接下來我將介紹一個(gè)以動(dòng)態(tài)代理類為基礎(chǔ)的框架,這個(gè)框架使得SOAP(簡單對(duì)象訪問協(xié)議)客戶程序的創(chuàng)建更加簡單和直觀。SOAP是一種用XML編碼數(shù)據(jù)的有線協(xié)議。在本系列文章的第二篇、第三篇構(gòu)造SOAP服務(wù)的過程中,我們發(fā)現(xiàn)客戶程序的開發(fā)者必須多做許多原來不必做的工作。為幫助回憶,你可以看一下第二篇文章中的SOAP服務(wù)代碼,看看和客戶程序代碼相比較時(shí),服務(wù)程序的SOAP代碼是多么微不足道。本系列文章前幾篇所創(chuàng)建的簡單SOAP服務(wù)顯示出,基于SOAP的服務(wù)只包含無論用不用SOAP都必須提供的代碼。服務(wù)程序的開發(fā)者要編寫的額外代碼很少,而客戶程序開發(fā)者卻有許多額外工作要做。本文介紹的類將把這些額外工作減到最少。
一、介紹SOAP代理類 首先,我要給出如果客戶程序使用了本文創(chuàng)建的框架,它將變成什么樣子:
package hello; import soapproxy.*; public class Client { public static void main(String[] args) { try { Class[] interfaces = new Class[] {hello.Hello.class}; Hello hello = (Hello)(Proxy.newInstance("urn:Hello",interfaces)); // 調(diào)用sayHelloTo方法 // 這個(gè)sayHelloTo方法需要一個(gè)字符串參數(shù) System.out.println(hello.sayHelloTo("John")); // 調(diào)用sayHelloTo方法 // 這個(gè)sayHelloTo方法需要一個(gè)Name JavaBean參數(shù) Name theName = new Name(); theName.setName("Mala"); System.out.println(hello.sayHelloTo(theName)); } catch(Exception e) { e.printStackTrace(); } } } |
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!