Java不僅是一種面向對象語言,也是一個面向組件的平臺。作為一個成功的平臺,Java提供諸多強大的功能。本書詳細討論了使用Java平臺開發(fā)組件的優(yōu)缺點,分析Java平臺的一些核心功能,如類加載、反射、串行化、與本機程序的交互操作和代碼生成等技術。通過本書的學習,您不僅可了解到如何有效地開發(fā)Java程序,同時也可了解到如何有效地部署Java組件,以充分利用Java提供的所有特性,創(chuàng)建靈活的、可重用的二進制組件,定義在運行時可安全可靠地連接二進制組件所需的服務。本書主要內容:·使用和維護類加載器·通過反射創(chuàng)建動態(tài)和通用服務·控制對象的串行化表示形式·加載和使用本機代碼組件·擴充Java類格式以添加自定義服務·通過代碼生成機制實現(xiàn)自動開發(fā)本書重點強調對Java程序的部署,以便于讀者充分利用Java一些強大但尚未推廣開的重要特性。本書前言本書詳細討論了Java平臺面向組件的特性,分析類加載、反射、串行化、本機交互操作及代碼生成等技術。本書對“組件”的定義獨特新穎:組件是一個獨立的生產和部署單元,可與其他組件結合,以組裝應用程序。對象和組件是不同的概念。對象表示問題域的實體,而組件是被安裝解決方案的原子成分。但對象與組件互為補充,正確的設計應兼顧二者。Java是備受開發(fā)者推崇的現(xiàn)代開發(fā)平臺,提供了創(chuàng)建類和組件所需要的基礎結構。Java提供封裝、繼承和多態(tài)性,以支持面向對象的編程等重要功能。Java還提供加載器和各種類型信息,以支持組件。本書將圍繞組件闡述如何有效使用Java的組件基礎結構。Java加載器在運行時定位、加載和連接組件。用Java加載器您可以做如下工作?!癫渴鸺毩6冉M件●根據需要動態(tài)加載組件●從網絡上的其他計算機加載組件●從自定義存儲庫加載組件●創(chuàng)建存在于多個虛擬機的移動式代碼代理●導入非Java組件的服務加載器管理組件間的二進制邊界。在分布式應用程序和多組件供應商環(huán)境中,加載器用于定位和連接所有兼容的組件。類型信息描述一些代碼單元的功能。在某些開發(fā)環(huán)境中,類型信息僅存在于源代碼。而在Java中,類型信息不單純是一種源代碼,還是編譯類的內在部分,可在運行時通過編程接口使用。因為Java類型信息從不被“編譯掉”,所以加載器使用它在運行時驗證類之間的鏈接。在應用程序編程中,類型信息的作用如下?!翊谢疛ava對象的狀態(tài),以便在另一虛擬機上重建對象●在運行時創(chuàng)建動態(tài)代理,以提供可用于任何接口的通用服務●將數(shù)據轉換為另一種表示形式,以與非Java組件交互操作●將方法調用轉換成網絡消息●在Java和XML之間轉換,XML是企業(yè)系統(tǒng)的新通用語言●使用應用程序專用元數(shù)據為組件添加注釋通過類型信息,可使原本需要手動編碼的任務自動實現(xiàn)。此外,類型信息還有助于組件與未來平臺的兼容。讀者對象為了解Java應用程序的整個生存期,不僅要考慮對象,還要考慮組件。本書討論作為組件平臺的Java的核心功能:類加載器,反射,串行化,以及與其他平臺的交互操作。本書適用于在Java中設計、開發(fā)或部署大量應用程序的讀者。在閱讀本書前,應了解Java語法的基本知識,并具有一些用Java編寫面向對象程序的經驗。本書并未特別介紹高級Java技術,如遠程方法調用(RemoteMethodInvocation,RMI)、企業(yè)JavaBean(EnterpriseJavaBean,EJB)、JINI、Java服務器頁(JavaServerPage,JSP)、servlet或JavaBean。但蘊涵的主題是這些技術的重要基礎。通過學習本書介紹的組件服務,可以理解這些高級技術的構建原理,從而有效地加以應用。安全性也是組件開發(fā)和部署的一個重要方面。由于篇幅所限,本書未對此做過多介紹。要詳細了解Java平臺上的安全性,請參見[Gon99](見本書最后的參考書目)。本書內容全書分三部分。第1章簡要介紹了組件,第2章到第6章解釋Java平臺上的加載器和類型信息。第7章顯示這些服務的更高級使用。第1章介紹面向組件的編程。不僅在編譯時,而且在部署和運行時建立組件的關聯(lián)。本章提出組件編程的關鍵問題,并將這些問題與后續(xù)章節(jié)中討論的Java平臺服務聯(lián)系起來。在學習本書時,建議您首先閱讀第1章,之后可以按自己安排的順序閱讀其他章節(jié)。第2章討論如何使用類加載器和解決類加載故障。類加載器用于控制代碼加載,并在同一進程中創(chuàng)建代碼間的命名空間邊界。通過類加載器,可在運行時運態(tài)加載代碼,甚至可以從其他計算機加載。類加載器命名空間允許單個Java虛擬機中有同一個類的多個版本。使用類加載器,可在不關閉虛擬機的情況下重新加載更改的類。本章將介紹如何使用類加載器,類加載器委托模型如何創(chuàng)建命名空間,如何解決類加載故障,以及如何有效控制引導類路徑、擴展路徑和類路徑。第3章介紹Java類型信息。Java以二進制類格式保存類型信息。這意味著,即使在編譯Java程序后,仍可訪問字段名、字段類型和方法簽名。在運行時可通過反射訪問類型信息,可使用類型信息來構建能為其他任何對象添加功能的通用服務。本章將討論動態(tài)調用、動態(tài)代理、包反射和自定義屬性的用法;還將討論反射性能。第4章討論Java串行化如何使用反射。串行化是一個很好的通用服務示例。不必預先了解類格式的任何知識,串行化可以跨越時間和空間,將代碼和狀態(tài)從一個虛擬機移至另一個虛擬機。學習本章您可以了解到:串行化格式如何嵌入其類型信息樣式,如何自定義表示形式;如何擴展默認串行化,如何用自定義外部化代碼完全替換,如何調整串行化,以隨代碼的演變來處理類的多個版本;如何驗證反串行化到應用程序的對象,以及如何用指令注解串行化對象,以查找正確的類加載器。第5章返回到類加載器主題,討論如何實現(xiàn)自定義類加載器。盡管標準類加載器在大多數(shù)應用程序中占據主導地位,但自定義類加載器的作用亦不容忽視。通過自定義類加載器,可在加載類時轉換類代碼。這些轉換包括解密,添加性能監(jiān)視指令,或甚至在運行時新建類。本章將介紹如何將自定義類加載器綁定到Java安全體系結構,如何編寫自定義類加載器,如何編寫可自定義加載類(以及其他任何類型資源)方式的協(xié)議處理程序。第6章介紹Java本機接口(JavaNativeInterface,JNI)。JNI是控制Java代碼與在其他環(huán)境中編寫的組件之間邊界的基本方式。Java和本機編程樣式存在較大差異,類加載、類型信息、資源管理、錯誤處理和數(shù)組存儲的方式等都存在顯著區(qū)別。Java提供一組低級別工具,將Java對象顯示給平臺本地代碼,和將平臺本地代碼顯示給Java對象。本章介紹如何使用JNI應用程序編程接口(API)實現(xiàn)Java和本機編程樣式之間的轉換。JNI存在諸多不足,為此,本書編排了附錄A以介紹更高級的方法。第7章討論使用Java元數(shù)據自動創(chuàng)建源代碼或字節(jié)碼。生成代碼是一種高性能重用策略,因為您只用生成在運行時需要的準確代碼路徑。本章首先介紹JSP和EJB,將此作為自動生成代碼的已有應用程序示例,然后介紹在自己的程序中生成代碼的一些觀點。附錄A返回到交互操作主題。在第7章介紹的代碼生成技術的基礎上,附錄A介紹如何在Java和另一組件平臺Win32/COM之間創(chuàng)建交互操作層。本章以Jawin開放源庫為例,闡釋如何為Win32對象生成Java占位程序,或由Java占位程序生成Win32對象。示例代碼、Web站點和反饋除非特別聲明,本書所有示例代碼都是開放源代碼,可從Web站點http://staff.Develop.com/halloway/compsvcs下載。除非特別聲明,書中代碼都在Java2SDK1.3版本中經過編譯和測試。大多數(shù)代碼也可用于SDK1.2、1.3和1.4版;若出現(xiàn)特例,本書將列出一個到適當SDK版本的特定引用。歡迎您對本書提出評論、更正和反饋意見,請將電子郵件發(fā)送到stu@develop.com。