更新时间:2023-07-12 21:58
bean(即Java bean)就是Java的类,或者说,就是Java语言的组件,充分体现了Java语言平台独立和面向对象编程的优势。JavaBeans是一代网络程序员的资源。它是Java语言的组件:bean的接口和通讯部分的标准,实现了bean的复用。
包含与开发 beans 有关的类,即基于 JavaBeansTM架构的组件。少数类可由bean使用,也能以应用程序的形式运行。例如,event 类由激发属性和禁止更改事件的 bean 使用(参见 PropertyChangeEvent)。不过,此包中的大多数类由 bean 编辑器(即自定义 bean 并将其汇集起来以创建应用程序的开发环境)使用。特别要指出的是,这些类帮助 bean 编辑器创建用户可以用来自定义 bean 的用户界面。例如,bean 可能包含 bean 编辑器也许不知道如何处理的特殊类型的属性。通过使用 PropertyEditor 接口,bean 开发人员可以为此特殊类型提供一个编辑器。
为了最大限度地减少 bean 使用的资源,只在要编辑 bean 时加载 bean 编辑器使用的类。当 bean 以应用程序的形式运行时,不需要这些类,所以不用加载它们。此信息在称为 bean-info 的类中(参见 BeanInfo)。
从 v1.4 开始,java.beans 包提供了对长期持久性 的支持,即以其属性值的文本表示形式读取或写入 bean。这些属性值被视为 bean,它们被递归地读取或写入,以捕获其公共可用状态。此方法适用于长期存储,因为它只依赖于公共 API 而不是很可能发生更改的私有实现。
--------------------------------------------------------------------------------
注: 持久性方案无法自动实例化自定义内部类,比如用于事件处理程序的类。通过使用 EventHandler 类而不是自定义事件处理程序的内部类,可以避免此问题。
--------------------------------------------------------------------------------
可分别使用 XMLDecoder 和 XMLEncoder 类读取和写入XML格式的 bean。持久性方案的一个显著特性是,读入 bean 不需要该 bean 的特定信息。
另一方面,读出 bean 有时需要 bean 类型的特定信息。如果可以只使用属性的无参数构造方法以及公共 getter 和 setter 方法表达 bean 的状态,则无需 bean 的特定信息。否则,bean 需要一个自定义持久委托,即负责写出特殊类型的 bean 的对象。从 java.awt.Component 中遗传的JDK中提供的所有类及其所有属性都将自动拥有持久委托。
如果需要(或选择)为 bean 提供持久委托,则可以通过使用 DefaultPersistenceDelegate 实例或通过创建自己的 PersistenceDelegate 子类来实现。如果 bean 需要持久委托的惟一原因是因为用户想调用 bean 使用属性值作为参数的构造方法,则可以使用无参数的 DefaultPersistenceDelegate 构造方法创建 bean 的持久委托。否则,用户需要实现自己的持久委托,对此,可能需要以下类:
PersistenceDelegate
这是一个抽象类,所有持久委托都是从它遗传的。子类应该使用它所知的 bean 类型信息来提供创建 bean 和恢复其状态所需的任何 Statement 和 Expression。
Statement
表示某一对象上的单个方法的调用。包括该方法的参数集合。
Expression
用于返回一个值的那些方法的 Statement 的子类。
一旦创建了一个持久委托,就可以使用 XMLEncoder 的 setPersistenceDelegate 方法注册它。
相关文档
有关概述、架构和教程文档的信息,请参阅:
JavaBeans,《The Java Tutorial》中的一部分。
Long-Term Persistence,The Swing Connection 中的一篇文章