书籍详情
Java平台组件开发
作者:(美)Stuart Dabbs Halloway著;韩宏志译
出版社:清华大学出版社
出版时间:2004-09-01
ISBN:9787302089346
定价:¥32.00
购买这本书可以去
内容简介
Java不仅是一种面向对象语言,也是一个面向组件的平台。作为一个成功的平台,Java提供诸多强大的功能。本书详细讨论了使用Java平台开发组件的优缺点,分析Java平台的一些核心功能,如类加载、反射、串行化、与本机程序的交互操作和代码生成等技术。通过本书的学习,您不仅可了解到如何有效地开发Java程序,同时也可了解到如何有效地部署Java组件,以充分利用Java提供的所有特性,创建灵活的、可重用的二进制组件,定义在运行时可安全可靠地连接二进制组件所需的服务。本书主要内容:·使用和维护类加载器·通过反射创建动态和通用服务·控制对象的串行化表示形式·加载和使用本机代码组件·扩充Java类格式以添加自定义服务·通过代码生成机制实现自动开发本书重点强调对Java程序的部署,以便于读者充分利用Java一些强大但尚未推广开的重要特性。本书前言本书详细讨论了Java平台面向组件的特性,分析类加载、反射、串行化、本机交互操作及代码生成等技术。本书对“组件”的定义独特新颖:组件是一个独立的生产和部署单元,可与其他组件结合,以组装应用程序。对象和组件是不同的概念。对象表示问题域的实体,而组件是被安装解决方案的原子成分。但对象与组件互为补充,正确的设计应兼顾二者。Java是备受开发者推崇的现代开发平台,提供了创建类和组件所需要的基础结构。Java提供封装、继承和多态性,以支持面向对象的编程等重要功能。Java还提供加载器和各种类型信息,以支持组件。本书将围绕组件阐述如何有效使用Java的组件基础结构。Java加载器在运行时定位、加载和连接组件。用Java加载器您可以做如下工作。●部署细粒度组件●根据需要动态加载组件●从网络上的其他计算机加载组件●从自定义存储库加载组件●创建存在于多个虚拟机的移动式代码代理●导入非Java组件的服务加载器管理组件间的二进制边界。在分布式应用程序和多组件供应商环境中,加载器用于定位和连接所有兼容的组件。类型信息描述一些代码单元的功能。在某些开发环境中,类型信息仅存在于源代码。而在Java中,类型信息不单纯是一种源代码,还是编译类的内在部分,可在运行时通过编程接口使用。因为Java类型信息从不被“编译掉”,所以加载器使用它在运行时验证类之间的链接。在应用程序编程中,类型信息的作用如下。●串行化Java对象的状态,以便在另一虚拟机上重建对象●在运行时创建动态代理,以提供可用于任何接口的通用服务●将数据转换为另一种表示形式,以与非Java组件交互操作●将方法调用转换成网络消息●在Java和XML之间转换,XML是企业系统的新通用语言●使用应用程序专用元数据为组件添加注释通过类型信息,可使原本需要手动编码的任务自动实现。此外,类型信息还有助于组件与未来平台的兼容。读者对象为了解Java应用程序的整个生存期,不仅要考虑对象,还要考虑组件。本书讨论作为组件平台的Java的核心功能:类加载器,反射,串行化,以及与其他平台的交互操作。本书适用于在Java中设计、开发或部署大量应用程序的读者。在阅读本书前,应了解Java语法的基本知识,并具有一些用Java编写面向对象程序的经验。本书并未特别介绍高级Java技术,如远程方法调用(RemoteMethodInvocation,RMI)、企业JavaBean(EnterpriseJavaBean,EJB)、JINI、Java服务器页(JavaServerPage,JSP)、servlet或JavaBean。但蕴涵的主题是这些技术的重要基础。通过学习本书介绍的组件服务,可以理解这些高级技术的构建原理,从而有效地加以应用。安全性也是组件开发和部署的一个重要方面。由于篇幅所限,本书未对此做过多介绍。要详细了解Java平台上的安全性,请参见[Gon99](见本书最后的参考书目)。本书内容全书分三部分。第1章简要介绍了组件,第2章到第6章解释Java平台上的加载器和类型信息。第7章显示这些服务的更高级使用。第1章介绍面向组件的编程。不仅在编译时,而且在部署和运行时建立组件的关联。本章提出组件编程的关键问题,并将这些问题与后续章节中讨论的Java平台服务联系起来。在学习本书时,建议您首先阅读第1章,之后可以按自己安排的顺序阅读其他章节。第2章讨论如何使用类加载器和解决类加载故障。类加载器用于控制代码加载,并在同一进程中创建代码间的命名空间边界。通过类加载器,可在运行时运态加载代码,甚至可以从其他计算机加载。类加载器命名空间允许单个Java虚拟机中有同一个类的多个版本。使用类加载器,可在不关闭虚拟机的情况下重新加载更改的类。本章将介绍如何使用类加载器,类加载器委托模型如何创建命名空间,如何解决类加载故障,以及如何有效控制引导类路径、扩展路径和类路径。第3章介绍Java类型信息。Java以二进制类格式保存类型信息。这意味着,即使在编译Java程序后,仍可访问字段名、字段类型和方法签名。在运行时可通过反射访问类型信息,可使用类型信息来构建能为其他任何对象添加功能的通用服务。本章将讨论动态调用、动态代理、包反射和自定义属性的用法;还将讨论反射性能。第4章讨论Java串行化如何使用反射。串行化是一个很好的通用服务示例。不必预先了解类格式的任何知识,串行化可以跨越时间和空间,将代码和状态从一个虚拟机移至另一个虚拟机。学习本章您可以了解到:串行化格式如何嵌入其类型信息样式,如何自定义表示形式;如何扩展默认串行化,如何用自定义外部化代码完全替换,如何调整串行化,以随代码的演变来处理类的多个版本;如何验证反串行化到应用程序的对象,以及如何用指令注解串行化对象,以查找正确的类加载器。第5章返回到类加载器主题,讨论如何实现自定义类加载器。尽管标准类加载器在大多数应用程序中占据主导地位,但自定义类加载器的作用亦不容忽视。通过自定义类加载器,可在加载类时转换类代码。这些转换包括解密,添加性能监视指令,或甚至在运行时新建类。本章将介绍如何将自定义类加载器绑定到Java安全体系结构,如何编写自定义类加载器,如何编写可自定义加载类(以及其他任何类型资源)方式的协议处理程序。第6章介绍Java本机接口(JavaNativeInterface,JNI)。JNI是控制Java代码与在其他环境中编写的组件之间边界的基本方式。Java和本机编程样式存在较大差异,类加载、类型信息、资源管理、错误处理和数组存储的方式等都存在显著区别。Java提供一组低级别工具,将Java对象显示给平台本地代码,和将平台本地代码显示给Java对象。本章介绍如何使用JNI应用程序编程接口(API)实现Java和本机编程样式之间的转换。JNI存在诸多不足,为此,本书编排了附录A以介绍更高级的方法。第7章讨论使用Java元数据自动创建源代码或字节码。生成代码是一种高性能重用策略,因为您只用生成在运行时需要的准确代码路径。本章首先介绍JSP和EJB,将此作为自动生成代码的已有应用程序示例,然后介绍在自己的程序中生成代码的一些观点。附录A返回到交互操作主题。在第7章介绍的代码生成技术的基础上,附录A介绍如何在Java和另一组件平台Win32/COM之间创建交互操作层。本章以Jawin开放源库为例,阐释如何为Win32对象生成Java占位程序,或由Java占位程序生成Win32对象。示例代码、Web站点和反馈除非特别声明,本书所有示例代码都是开放源代码,可从Web站点http://staff.Develop.com/halloway/compsvcs下载。除非特别声明,书中代码都在Java2SDK1.3版本中经过编译和测试。大多数代码也可用于SDK1.2、1.3和1.4版;若出现特例,本书将列出一个到适当SDK版本的特定引用。欢迎您对本书提出评论、更正和反馈意见,请将电子邮件发送到stu@develop.com。
作者简介
暂缺《Java平台组件开发》作者简介
目录
第1章 从对象到组件
第2章 类加载器体系结构
2.1 组状应用程序
2.2 类加载器结构的目标
2.1.1 透明性
2.2.2 可扩展性
2.2.3 功能丰富
2.2.4 可配置性
2.2.5 处理命名和版本冲突
2.2.6 安全性
2.3 显式和隐式类加载
2.3.1 用URLClassloader显示加载
2.3.2 隐式类加载
2.3.3 引用类型与已引用类
2.3.4 Classloader.loadClass与Class.forName
2.3.5 加载非类资源
2.4 类加载
2.4.1 一致性规则
2.4.2 委托规则
2.4.3 可见性规则
2.4.4 委托用作命名空间
2.4.5 非Singleton模式的静态字段
2.4.6 隐式加载隐藏了大多数细节
2.5 热部署
2.6 卸载类
2.7 引导类路径\扩展路径和类路径
2.7.1 类路径
2.7.2 扩展路径
2.7.3 引导类路径
2.8 调试类加载结构
2.8.1 改编应用程序
2.8.2 使用verbose:class标志
2.8.3 改编内核APl
2.9 倒置问题和上下文类加载器
2.10 小结
2.11 资源
第3章 类型信息和反射
3.1 二进制类格式
3.1.1 二进制兼容性
3.1.2 二进制类元数据
3.1.3 从二进制类到反射
3.2 反射
3.2.1 反射字段
3.2.2 get和getDeclared的区别
3.2.3 运行时出现的类型错误
3.2.4 反射方法
3.3 反射调用
3.3.1 反射启动器
3.3.2 包装基本类型
3.3.3 避开语言访问规则
3.3.4 反射调用引发的异常
3.4 动态代理
3.4.1 用委托代替实现继承
3.4.2 动态代理使委托通用化
3.4.3 实现InvocationHandler'
3.4.4 实现转发处理程序
3.4.5 将InvocationHandler用作通用服务
3.4.6 处理InvocationHandler中的异常
3.4.7 客户程序或服务器都可安装代理
3.4.8 动态代理的优点
3.5 反射性能
3.6 包反射
3.6.1 设置包元数据
3.6.2 访问包元数据
3.6.3 封装包
3.6.4 版本控制机制的弱点
3.7 自定义元数据
3.8 小结
3.9 资源
第4章 串行化处理机制
4.1 串行化处理和元数据
4.2 串行化基础知识
4.2.1 串行化忽略的一些字段
4.2.2 串行化与类构造函数
4.3 使用readObject和writeObject
4.4 将流与类匹配
4.4.1 serialVersionUID
4.4.2 重写默认SUID
4.4.3 兼容的和不兼容的更改
4.5 显式管理可串化字段
4.5.1 ObjectlnputStream.GetField应用提示
4.5.2 编写器对格式的处理
4.5.3 重写类元数据
4.5.4 性能问题
4.5.5 自定义类描述符
4.6 停用元数据
4.6.1 在defaultWriteObiect后写入自定义数据
4.6.2 可外部化
4.6.3 用writeObiect只写入原始数据:错误做滋
4.7 对象图
4.7.1 用Transient关键字缩减图大小
4.7.2 保存标识
4.7.3 通过reset关键字来利用无用单元收集器
4.8 对象替换
4.8.1 流控制替换
4.8.2 类控制替换
4.8.3 替换的排序规则
4.8.4 控制图排序
4.9 查找类代码
4.9.1 RMI中的注解
4.9.2 RMIMarshalledObject
4.10 小结
4.11 资源
第5章 自定义类加载器
5.1 Java2安全性
5.2 自定义类加载器
5.2.1 Java2之前的自定义类加载器
5.2.2 SDKl.2后的类加载
5.2.3 转换类加载器
5.3 协议处理程序
5.3.1 实现处理程序
5.3.2 安装自定义处理程序
5.3.3 加载器和处理程序之间的选择
5.4 为需要的加载器传递安全性
5.5 读取自定义元数据
5.5.1 版本属性示例
5.5.2 可串行类用作属性
5.5.3 在类加载时读取属性
5.5.4 调试支持
5.6 小结
5.7 资源
第6章 交互操作1:JNI
6.1 交互操作的原因
6.2 本机代码的危险
6.3 查找和加载本机代码
6.3.1 名称映射
6.3.2 类型映射
6.3.3 重载名
6.3.4 加载本机库
6.3.5 类加载器和JNI
6.3.6 加载本机库的常见错误
6.3.7 本机加载释疑
6.4 从C++调用Java
6.4.1 最小化往返次数
6.4.2 性能比较
6.4.3 JNI和反射调用的区别
6.5 JNI中的错误处理
6.5.1 本机代码中的故障
6.5.2 处理C++异常
6.5.3 从本机代码处理异常
6.5.4 从本机代码抛出Java异常
6.6 资源管理
6.6.1 与无用单元收集器的交互
6.6.2 管理本机资源
6.6.3 管理数组
6.6.4 管理字符串
6.7 小结
6.8 资源
第7章 生成式编程
7.1 使用生成式代码的原因
7.1.1 建立变性模型的面向对象的方法
7.1.2 按绑定时间进行分析
7.1.3 分离绑定时间和规范
7.1.4 选择规范语言
7.1.5 重用性的高需求
7.1.6 小型域分析很危险
7.2 用Java生成代码的原因
7.2.1 类型信息用作自由规范文档
7.2.2 类加载支持灵活绑定模式
7.2.3 易于生成Java源文件
7.2.4 易于生成Java二进制类
7.2.5 代码生成功能有利于提高性能
7.2.6 代码生成的责任级别
7.3 绑定时间和模式的分类
7.4 RMI中的代码生成
7.5 JSP中的代码生成
7.6 EJB中的代码生成
7.6.1 部署描述符
7.6.2 替补实现
7.7 生成强类型集合
7.8 生成自定义串行化代码
7.9 小结
7.10 资源
第8章 展望
8.1 当前状况
8.2 发展方向
8.3 资源
附录A 交互操作2:连接Java和Win32/COM
A.1 综述
A.2 半透明占位程序
A.3 平台差异
A.4 组件对象模型
A.4.1 COM加载器
A.4.2 COM类型信息
A.4.3 COM对象生存期
A.4.4 COM类型发现
A.4.5 COM错误处理
A.4.6 COM线程亲缘性
A.4.7 COM安全性
A.5 Win32动态链接库
A.5.1 DLI加载器
A.5.2 DLL类型信息
A.5.3 DLL对象生存期
A.5.4 DLI类型发现
A.5.5 DLL错误报告
A.5.6 DLL线程亲缘性
A.5.7 DLL安全性
A.6 编组体系结构
A.6.1 共享占位程序
A.6.2 通用占位程序
A.6.3 指令字符串
A.7 生成占位程序
A.7.1 生成共享占位程序
A.7.2 生成接口占位程序
A.8 小结
参考书目
第2章 类加载器体系结构
2.1 组状应用程序
2.2 类加载器结构的目标
2.1.1 透明性
2.2.2 可扩展性
2.2.3 功能丰富
2.2.4 可配置性
2.2.5 处理命名和版本冲突
2.2.6 安全性
2.3 显式和隐式类加载
2.3.1 用URLClassloader显示加载
2.3.2 隐式类加载
2.3.3 引用类型与已引用类
2.3.4 Classloader.loadClass与Class.forName
2.3.5 加载非类资源
2.4 类加载
2.4.1 一致性规则
2.4.2 委托规则
2.4.3 可见性规则
2.4.4 委托用作命名空间
2.4.5 非Singleton模式的静态字段
2.4.6 隐式加载隐藏了大多数细节
2.5 热部署
2.6 卸载类
2.7 引导类路径\扩展路径和类路径
2.7.1 类路径
2.7.2 扩展路径
2.7.3 引导类路径
2.8 调试类加载结构
2.8.1 改编应用程序
2.8.2 使用verbose:class标志
2.8.3 改编内核APl
2.9 倒置问题和上下文类加载器
2.10 小结
2.11 资源
第3章 类型信息和反射
3.1 二进制类格式
3.1.1 二进制兼容性
3.1.2 二进制类元数据
3.1.3 从二进制类到反射
3.2 反射
3.2.1 反射字段
3.2.2 get和getDeclared的区别
3.2.3 运行时出现的类型错误
3.2.4 反射方法
3.3 反射调用
3.3.1 反射启动器
3.3.2 包装基本类型
3.3.3 避开语言访问规则
3.3.4 反射调用引发的异常
3.4 动态代理
3.4.1 用委托代替实现继承
3.4.2 动态代理使委托通用化
3.4.3 实现InvocationHandler'
3.4.4 实现转发处理程序
3.4.5 将InvocationHandler用作通用服务
3.4.6 处理InvocationHandler中的异常
3.4.7 客户程序或服务器都可安装代理
3.4.8 动态代理的优点
3.5 反射性能
3.6 包反射
3.6.1 设置包元数据
3.6.2 访问包元数据
3.6.3 封装包
3.6.4 版本控制机制的弱点
3.7 自定义元数据
3.8 小结
3.9 资源
第4章 串行化处理机制
4.1 串行化处理和元数据
4.2 串行化基础知识
4.2.1 串行化忽略的一些字段
4.2.2 串行化与类构造函数
4.3 使用readObject和writeObject
4.4 将流与类匹配
4.4.1 serialVersionUID
4.4.2 重写默认SUID
4.4.3 兼容的和不兼容的更改
4.5 显式管理可串化字段
4.5.1 ObjectlnputStream.GetField应用提示
4.5.2 编写器对格式的处理
4.5.3 重写类元数据
4.5.4 性能问题
4.5.5 自定义类描述符
4.6 停用元数据
4.6.1 在defaultWriteObiect后写入自定义数据
4.6.2 可外部化
4.6.3 用writeObiect只写入原始数据:错误做滋
4.7 对象图
4.7.1 用Transient关键字缩减图大小
4.7.2 保存标识
4.7.3 通过reset关键字来利用无用单元收集器
4.8 对象替换
4.8.1 流控制替换
4.8.2 类控制替换
4.8.3 替换的排序规则
4.8.4 控制图排序
4.9 查找类代码
4.9.1 RMI中的注解
4.9.2 RMIMarshalledObject
4.10 小结
4.11 资源
第5章 自定义类加载器
5.1 Java2安全性
5.2 自定义类加载器
5.2.1 Java2之前的自定义类加载器
5.2.2 SDKl.2后的类加载
5.2.3 转换类加载器
5.3 协议处理程序
5.3.1 实现处理程序
5.3.2 安装自定义处理程序
5.3.3 加载器和处理程序之间的选择
5.4 为需要的加载器传递安全性
5.5 读取自定义元数据
5.5.1 版本属性示例
5.5.2 可串行类用作属性
5.5.3 在类加载时读取属性
5.5.4 调试支持
5.6 小结
5.7 资源
第6章 交互操作1:JNI
6.1 交互操作的原因
6.2 本机代码的危险
6.3 查找和加载本机代码
6.3.1 名称映射
6.3.2 类型映射
6.3.3 重载名
6.3.4 加载本机库
6.3.5 类加载器和JNI
6.3.6 加载本机库的常见错误
6.3.7 本机加载释疑
6.4 从C++调用Java
6.4.1 最小化往返次数
6.4.2 性能比较
6.4.3 JNI和反射调用的区别
6.5 JNI中的错误处理
6.5.1 本机代码中的故障
6.5.2 处理C++异常
6.5.3 从本机代码处理异常
6.5.4 从本机代码抛出Java异常
6.6 资源管理
6.6.1 与无用单元收集器的交互
6.6.2 管理本机资源
6.6.3 管理数组
6.6.4 管理字符串
6.7 小结
6.8 资源
第7章 生成式编程
7.1 使用生成式代码的原因
7.1.1 建立变性模型的面向对象的方法
7.1.2 按绑定时间进行分析
7.1.3 分离绑定时间和规范
7.1.4 选择规范语言
7.1.5 重用性的高需求
7.1.6 小型域分析很危险
7.2 用Java生成代码的原因
7.2.1 类型信息用作自由规范文档
7.2.2 类加载支持灵活绑定模式
7.2.3 易于生成Java源文件
7.2.4 易于生成Java二进制类
7.2.5 代码生成功能有利于提高性能
7.2.6 代码生成的责任级别
7.3 绑定时间和模式的分类
7.4 RMI中的代码生成
7.5 JSP中的代码生成
7.6 EJB中的代码生成
7.6.1 部署描述符
7.6.2 替补实现
7.7 生成强类型集合
7.8 生成自定义串行化代码
7.9 小结
7.10 资源
第8章 展望
8.1 当前状况
8.2 发展方向
8.3 资源
附录A 交互操作2:连接Java和Win32/COM
A.1 综述
A.2 半透明占位程序
A.3 平台差异
A.4 组件对象模型
A.4.1 COM加载器
A.4.2 COM类型信息
A.4.3 COM对象生存期
A.4.4 COM类型发现
A.4.5 COM错误处理
A.4.6 COM线程亲缘性
A.4.7 COM安全性
A.5 Win32动态链接库
A.5.1 DLI加载器
A.5.2 DLL类型信息
A.5.3 DLL对象生存期
A.5.4 DLI类型发现
A.5.5 DLL错误报告
A.5.6 DLL线程亲缘性
A.5.7 DLL安全性
A.6 编组体系结构
A.6.1 共享占位程序
A.6.2 通用占位程序
A.6.3 指令字符串
A.7 生成占位程序
A.7.1 生成共享占位程序
A.7.2 生成接口占位程序
A.8 小结
参考书目
猜您喜欢