Java不仅是一种面向对象语言,也是一个面向组件的平台。作为一个成功的平台,Java提供诸多强大的功能。本书详细讨论了使用Java平台开发组件的优缺点,分析Java平台的一些核心功能,如类加载、反射、串行化、与本机程序的交互操作和代码生成等技术。
通过本书的学习,您不仅可了解到如何有效地开发Java程序,同时也可了解到如何有效地部署Java组件,以充分利用Java提供的所有特性,创建灵活的、可重用的二进制组件,定义在运行时可安全可靠地连接二进制组件所需的服务。
本书主要内容:
● 使用和维护类加载器
● 通过反射创建动态和通用服务
● 控制对象的串行化表示形式
● 加载和使用本机代码组件
● 扩充Java类格式以添加自定义服务
● 通过代码生成机制实现自动开发
本书重点强调对Java程序的部署,以便于读者充分利用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.4Classloader.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.2get和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.1serialVersionUID
4.4.2重写默认SUID
4.4.3兼容的和不兼容的更改
4.5显式管理可串化字段
4.5.1ObjectlnputStream.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.1RMI中的注解
4.9.2RMIMarshalledObject
4.10小结
4.11资源
第5章自定义类加载器
5。1Java2安全性
5.2自定义类加载器
5.2.1Java2之前的自定义类加载器
5.2.2SDKl.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.3JNI和反射调用的区别
6.5JNI中的错误处理
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.4RMI中的代码生成
7.5JSP中的代码生成
7.6EJB中的代码生成
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.1COM加载器
A.4.2COM类型信息
A.4.3COM对象生存期
A.4.4COM类型发现
A.4.5COM错误处理
A.4.6COM线程亲缘性
A.4.7COM安全性
A.5Win32动态链接库
A.5.1DLI加载器
A.5.2DLL类型信息
A.5.3DLL对象生存期
A.5.4DLI类型发现
A.5.5DLL错误报告
A.5.6DLL线程亲缘性
A.5.7DLL安全性
A.6编组体系结构
A.6.1共享占位程序
A.6.2通用占位程序
A.6.3指令字符串
参考书目
生成占位程序
A.7.1生成共享占位程序
A.7.2生成接口占位程序
小结