主题

简介 To top of page

JavaBeans 定义了一个简单而强大的 Java 组件模型。JavaBeans 的目标是提供自包含和可重复使用的单元,开发人员可以通过编程或在构建程序工具中可视地操作这些单元。

JavaBeans 可以是 GUI 控件或可能没有直观表示。为了在构建程序工具中操作 GUI 控件,Java 中的 GUI 控件通常是 JavaBeans。在 J2EE 中,通常通过 JSP 使用简单 JavaBeans,在 JSP 中,HTML 表示和 Java 代码得以分离,而 Java 代码包含在 JavaBeans 中。

JavaBean 是有三个独特特性的 Java 类:

JavaBean 属性 To top of page

JavaBean 的属性可以被其它组件访问到。通常,属性是一个通过 setter 方法和 getter 方法访问的私有值,但它也可以是一个计算的值。属性更新会有各种副作用。

访问器是用于访问属性的方法。访问器可以是 getter 方法和 setter 方法,并且它们遵循以下命名约定:

void setPropertyName(PropertyType value); // setter
PropertyType getPropertyName() // getter

对于布尔属性,getter 方法可以是:

boolean isPropertyName() // getter for a boolean property

示例:Customer Bean

以下是一个简单的 JavaBean(客户)示例,有两个简单的属性:name 和 email。注意是如何通过 set/get 方法对定义这些属性的。

显示“客户”属性的 UML 图。

public class Customer {
private String name;
private String email;

public String getName() {
return name;
}

public void setName(String aName) {
name = aName;
}

public String getEmail() {
return email;
}

public void setEmail(String aEmail) {
email = aEmail;
}

}

这种简单的 JavaBeans 经常用在 JSP 中,来实现 Web 页面上值从表单的传送。

索引的属性 To top of page

除了只有单个值的简单属性,属性还可以是包含在数组中的一组值。

索引的属性可以返回指定索引位置的值,或整个值数组。

索引的属性有以下特征:

void setPropertyName(int index, PropertyType value); // indexed setter
PropertyType getter(int index); // indexed getter
void setPropertyName(PropertyType values[]); // array setter
PropertyType[]getPropertyName(); // array getter

绑定的属性 To top of page

绑定的属性机制提供属性更改时的通知服务。 希望得到更改通知的对象预先注册它们自己,当发生属性更改时,向注册的对象发送通知。通常,由具有绑定属性的组件在设置该属性之后击发事件,来完成该通知。

具有绑定属性的 JavaBean 提供了对感兴趣的对象进行注册和注销的方法,称为监听器。开发人员可以定义他们自己的通知机制,但 Java 库在 java.beans 包中提供了大量常用的支持类。

限制的属性 To top of page

限制的属性与绑定的属性类似,但在实际设置属性之前发出通知。这使感兴趣方能够通过抛出 PropertyVetoException 来禁止属性更改。

事件和通知 To top of page

事件是 JavaBeans 的一项特性,它允许单独开发的组件通过传播关于状态更改的信息互相通信。在该模型中,一些组件击发事件,而其它处于事件监听程序角色中的组件处理事件。

为支持该通信模型,JavaBeans 组件模型提供:

  • 可以击发事件的属性(绑定的和限制的属性)、
  • 注册方法(以便监听程序可以注册它们自己)、
  • 事件(包含关于更改的信息)以及
  • 监听程序(可以对传递的事件作出反应)。

以下类图针对一个称为 EventSource 的 JavaBean(有一个简单的 int 属性的)说明了这些概念。

附带文本中描述的图。

配置期间,具体监听程序向 JavaBean 注册。一段时间后,一些其它对象调用 setProperty 方法,该方法将通过创建事件对象启动通知进程。EventSource JavaBean 将在所有注册的监听程序上调用 propertyChange 方法。事件监听程序将接收该事件,从它读取值并对事件作出反应。

以下序列图说明了调用顺序:

附带文本中描述的图。

通知监听器的过程与作为事件源的 JavaBean 实例同步,但事件监听程序可以在另一个线程中完成事件处理。

内省 To top of page

内省是一种运行时机制,可发现 JavaBean 的属性事件和方法。开发工具和不使用与其它组件的硬编码相关性的程序会使用内省。内省是通过反射以及一组方法和接口命名约定来实现的。BeanInfo 类支持内省的附加特性。用于内省的 JavaBean 命名约定有时称为“设计模式”,但不应将它们与面向对象设计中的设计模式概念相混淆。

持久性 To top of page

可以通过序列化机制使 JavaBean 持久化。序列化可以是自动或定制的,这依赖于 JavaBean 是否实现了 SerializableExternalizable 接口。JDK 1.4 引入了 XMLEncoderXMLDecoder 类,这些类支持以 XML 格式存储 JavaBeans 实例。

定制 To top of page

可以在设计时定制 JavaBean 的外观和行为。这对于在图形用户界面中使用的可视 JavaBeans 特别重要。通过属性编辑器或通过使用定制程序完成定制。 定制程序提供了一个定制用户界面,用于在设计时配置 JavaBean 实例。

BeanContext To top of page

BeanContext 定义了一个逻辑容器分层结构,该结构使 JavaBeans 能够向它们的环境询问其能力和服务。BeanContext 机制提供对 JavaBeans 逻辑容器分层结构的支持,以及对层次结构中由 JavaBeans 提供的服务的查询。

JavaBeans™ 激活框架 To top of page

Java 激活框架是标准的 Java 扩展,它允许确定数据段的类型、封装该数据段、发现其可用的操作以及使与该数据段上的期望操作对应的软件组件实例化。

更多信息To top of page

关于 JavaBeans 的更多信息,请参阅 http://java.sun.com/ 上的 JavaBeans API 规范 V1.01。请遵循到 Docs & Training > Java 2 Platform, Standard Edition > Java 2 SDK, SE v1.3 documentation > JavaBeans > JavaBeans Specification 的链接。




此内容全部或部分由 Inferdata Corporation 开发。

Rational Unified Process   2003.06.15