模块 java.desktop

包 java.beans


java.beans
包含与开发 beans 相关的类——基于 JavaBeans 体系结构的组件。 bean 在应用程序中运行时会使用一些类。例如,事件类由触发属性和可否决更改事件的 bean 使用(请参阅 PropertyChangeEvent )。但是,这个包中的大部分类都旨在供 bean 编辑器使用(即,用于定制和组合 bean 以创建应用程序的开发环境)。特别是,这些类帮助 bean 编辑器创建用户可以用来定制 bean 的用户接口。例如,一个 bean 可能包含一个 bean 编辑器可能不知道如何处理的特殊类型的属性。通过使用 PropertyEditor 接口,bean 开发人员可以为这种特殊类型提供一个编辑器。

为了最小化 bean 使用的资源,bean 编辑器使用的类仅在编辑 bean 时加载。当 bean 在应用程序中运行时不需要它们,因此不会加载它们。此信息保存在所谓的 bean-info 中(请参阅 BeanInfo )。

除非明确说明,否则空值或空字符串不是此包中方法的有效参数。如果使用这些参数,您可能希望看到异常。

长期坚持

从 v1.4 开始,java.beans 包提供了对 long-term persistence 的支持——读取和写入 bean 作为其属性值的文本表示。属性值被视为 beans,并被递归读取或写入以捕获其公开可用的状态。这种方法适用于长期存储,因为它仅依赖于公共 API,而不是可能更改的私有实现。

笔记:持久性方案无法自动实例化自定义内部类,例如您可能用于事件处理程序的类。通过使用 EventHandler 类而不是自定义事件处理程序的内部类,可以避免此问题。

您分别使用 XMLDecoder XMLEncoder 类以 XML 格式读取和写入 bean。持久性方案的一个显着特征是读取 bean 不需要对 bean 有特殊的了解。

另一方面,写出一个 bean 有时需要对 bean 的类型有特殊的了解。如果 bean 的状态可以仅使用无参数构造函数和属性的公共 getter 和 setter 方法来表达,则不需要特殊知识。否则,bean 需要自定义 persistence delegate —— 一个负责写出特定类型 bean 的对象。 JDK 中提供的所有派生自 java.awt.Component 的类及其所有属性都自动具有持久性委托。

如果您需要(或选择)为 bean 提供持久性委托,您可以通过使用 DefaultPersistenceDelegate 实例或创建您自己的 PersistenceDelegate 子类来实现。如果 bean 需要持久性委托的唯一原因是因为您想以属性值作为参数调用 bean 的构造函数,则可以使用单参数 DefaultPersistenceDelegate 构造函数创建 bean 的持久性委托。否则,您需要实现自己的持久化委托,为此您可能需要以下类:

PersistenceDelegate
所有持久性委托派生的抽象类。您的子类应该使用它对 bean 类型的了解来提供创建 bean 和恢复其状态所需的任何 StatementExpression
Statement
表示对对象的单个方法的调用。包括方法的一组参数。
Expression
Statement 的子类,用于返回值的方法。

创建持久性委托后,您可以使用 XMLEncodersetPersistenceDelegate 方法注册它。

有关概述、体系结构和教程文档,请参阅:
  • 描述
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    Applet API 已弃用。
    BeanDescriptor 提供关于“bean”的全局信息,包括它的 Java 类、它的 displayName 等。
    使用 BeanInfo 接口创建一个 BeanInfo 类,并提供有关您的 bean 的方法、属性、事件和其他特性的显式信息。
    用于为自动生成的BeanInfo 类指定一些属性相关信息的注解。
    这个类提供了一些通用的 beans 控制方法。
    构造方法上的注释,显示该构造方法的参数如何对应于构造对象的 getter 方法。
    定制器类为定制目标 Java Bean 提供了完整的定制 GUI。
    DefaultPersistenceDelegate 是抽象类 PersistenceDelegate 的具体实现,是默认情况下用于没有可用信息的类的委托。
    此接口旨在由 java.beans.beancontext.BeanContext 的实例实现或从其委托,以便传播到其嵌套的 java.beans.beancontext.BeanContextChild 实例层次结构,即当前的“designTime”属性。
    Encoder 是一个类,可用于创建文件或流,这些文件或流根据其公共 API 对 JavaBeans 集合的状态进行编码。
    EventHandler 类支持动态生成事件监听器,其方法执行涉及传入事件对象和目标对象的简单语句。
    EventSetDescriptor 描述给定 Java bean 触发的一组事件。
    ExceptionListener 会收到内部异常的通知。
    Expression 对象表示原始表达式,其中将单个方法应用于目标和一组参数以返回结果 - 如 "a.getFoo()" 中所示。
    FeatureDescriptor 类是 PropertyDescriptor、EventSetDescriptor 和 MethodDescriptor 等的公共基类。
    每当符合 JavaBeans 规范的组件(“bean”)更改绑定的索引属性时,就会发送“IndexedPropertyChange”事件。
    IndexedPropertyDescriptor 描述了一个类似于数组的属性,并具有索引读取和/或索引写入方法来访问数组的特定元素。
    在内省期间发生异常时抛出。
    Introspector 类为工具提供了一种标准方法来了解目标 Java Bean 支持的属性、事件和方法。
    用于为自动生成的BeanInfo 类指定一些类相关信息的注解。
    MethodDescriptor 描述了 Java Bean 支持从其他组件进行外部访问的特定方法。
    除了 java.lang.reflect.Method 类提供的低级类型信息之外,ParameterDescriptor 类允许 bean 实现者提供有关其每个参数的附加信息。
    PersistenceDelegate 类负责根据类的公共 API 中的方法来表达给定类实例的状态。
    每当 bean 更改“绑定”或“约束”属性时,都会传递“PropertyChange”事件。
    只要 bean 更改“绑定”属性,就会触发“PropertyChange”事件。
    扩展 EventListenerProxy 的类,专门用于添加具有“绑定”属性的 PropertyChangeListener
    这是一个实用程序类,可由支持绑定属性的 bean 使用。
    PropertyDescriptor 描述了 Java Bean 通过一对访问器方法导出的一个属性。
    PropertyEditor 类为希望允许用户编辑给定类型的属性值的 GUI 提供支持。
    PropertyEditorManager 可用于定位任何给定类型名称的属性编辑器。
    这是一个帮助构建属性编辑器的支持类。
    当提议的属性更改表示不可接受的值时,将抛出 PropertyVetoException。
    这是一个支持类,使人们更容易提供 BeanInfo 类。
    Statement 对象表示原始语句,其中将单个方法应用于目标和一组参数 - 如 "a.setFoo(b)" 中所示。
    指示当 Introspector 构造与带注解的代码元素关联的 PropertyDescriptor EventSetDescriptor 类时,应使用给定的 value 声明名为“瞬态”的属性。
    只要 bean 更改“约束”属性,就会触发 VetoableChange 事件。
    扩展 EventListenerProxy 的类,专门用于添加具有“约束”属性的 VetoableChangeListener
    这是一个实用程序类,可由支持约束属性的 bean 使用。
    在某些情况下,bean 可能会在 GUI 不可用的服务上运行。
    XMLDecoder 类用于读取使用 XMLEncoder 创建的 XML 文档,其用法与 ObjectInputStream 相同。
    XMLEncoder 类是 ObjectOutputStream 的补充替代品,可用于生成 JavaBean 的文本表示,就像 ObjectOutputStream 可用于创建 Serializable 对象的二进制表示一样。