Concepto: JavaBean
En esta directriz se proporciona una visión general de los JavaBeans, un modelo de componentes potente y simple para Java.
Relaciones
Elementos relacionados
Descripción principal

Introducción

Los JavaBeans definen un modelo de componentes potente y simple para Java. El objetivo de los JavaBeans es proporcionar unas unidades reutilizables y autosuficientes que los desarrolladores puedan manipular mediante programación o que las herramientas de construcción puedan manipular de forma visual.

Los JavaBeans pueden ser controles de interfaz gráfica de usuario o pueden no tener representación visual alguna. Los controles de interfaz gráfica de usuario en Java habitualmente son JavaBeans para que las herramientas de construcción puedan manipularlos. En J2EE, los JavaBeans sencillos se utilizan habitualmente desde JSP, donde proporcionan una separación de la presentación en HTML y el código Java, que lo contienen los JavaBeans.

Un JavaBean es una clase Java con tres características distintivas:

Propiedades de los JavaBean

Otros componentes pueden acceder a las propiedades de un JavaBean. Normalmente, una propiedad corresponde a un valor privado al que se accede mediante los métodos setter y getter, pero también puede ser un valor calculado. La actualización de propiedades puede dar lugar a algunos efectos colaterales.

Los accesores son métodos para acceder a las propiedades. Los accesores pueden ser getter o setter, y siguen los siguientes convenios de denominación:

void setNombre_propiedad(Tipo_propiedad valor); // setter
Tipo_propiedad getNombre_propiedad() // getter

Para una propiedad booleana, un método getter podría ser:

boolean isNombre_propiedad() // getter para una propiedad booleana

Ejemplo: Bean Customer

A continuación se muestra un ejemplo de un JavaBean simple (Customer) con dos propiedades simples: name y email. Observe que las propiedades se definen mediante parejas de métodos set/get.

Diagrama UML mostrando las propiedades de Customer.

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 simples como el del ejemplo se utilizan a menudo en JSP, ya que ofrecen la posibilidad de transportar valores de formularios en páginas web.

Propiedades indexadas

Junto con las propiedades simples, que tienen un único valor, una propiedad puede ser un conjunto de valores dentro de una matriz.

Las propiedades indexadas permiten devolver un valor de la matriz con el índice especificado o bien toda la matriz de valores.

Las propiedades indexadas tienen las siguientes firmas:

void setNombre_propiedad(int índice, Tipo_propiedad valor); // setter indexado
Tipo_propiedad getter(int índice); // getter indexado
void setNombre_propiedad(Tipo_propiedad valores[]); // setter de matriz
Tipo_propiedad[]getNombre_propiedad(); // getter de matriz

Propiedades vinculadas

El mecanismo de propiedad vinculada proporciona un aviso un servicio de notificación cuando la propiedad cambia. Los objetos a los que interesa ser avisados del cambio se deben registrar anticipadamente y, cuando la propiedad cambia, se envía una notificación a los objetos registrados. Habitualmente, esta notificación se realiza mediante un suceso que el componente desencadena con la propiedad vinculada después de que se haya establecido la propiedad.

Un JavaBean con una propiedad vinculada expone métodos de registro y anulación del registro de los objetos interesados, denominados escuchas. Los desarrolladores pueden definir su propio mecanismo de notificación, sin embargo, las bibliotecas Java proporcionan varias clases de soporte en el paquete java.beans que se utilizan de forma habitual.

Propiedades restringidas

Las propiedades restringidas son similares a las propiedades vinculadas, sin embargo, la notificación se da antes que se establezca realmente la propiedad. De esta forma se consigue que quien esté interesado pueda no permitir el cambio de la propiedad mediante el lanzamiento de PropertyVetoException.

Sucesos y notificación

Los sucesos son una característica de los JavaBeans que permite que los componentes desarrollados de forma independiente se puedan comunicar entre sí mediante la propagación de la información acerca de su estado. En este modelo, algunos componentes desencadenan sucesos, que otros componentes manejan, desempeñando el rol de escuchas de sucesos.

Para poder dar soporte a este modelo de comunicación, el modelo de componentes de JavaBeans proporciona:

  • Propiedades que pueden desencadenar sucesos (propiedades vinculadas y restringidas).
  • Métodos de registro, de forma que los escuchas se puedan registrar por sí mismos.
  • Sucesos, que llevan la información sobre el cambio.
  • Escuchas, que pueden reaccionar en relación con el suceso entregado.

El siguiente diagrama de clase ilustra estos conceptos para un JavaBean denominado EventSource con una propiedad int simple.

Diagrama descrito en el texto adjunto.

Durante la configuración, determinados escuchas se registran con el JavaBean. Posteriormente, algún otro objeto llama al método setProperty, que iniciará el proceso de notificación mediante la creación del objeto de suceso. El JavaBean EventSource invocará al método propertyChange en todos los escuchas registrados. Los escuchas de sucesos recibirán el suceso, leerán sus valores y reaccionarán en relación con dicho suceso.

En el siguiente diagrama de acontecimientos se muestra el orden en el que se realizan las invocaciones:

Diagrama descrito en el texto adjunto.

La notificación de los escuchas se realiza de forma síncrona en relación con la instancia del JavaBean, que es el origen del suceso, sin embargo el escucha de sucesos puede realizar el proceso de los sucesos en otra hebra.

Introspección

La introspección es un mecanismo de tiempo de ejecución que habilita la detección de propiedades, sucesos y métodos de un JavaBean. Los programas y las herramientas de desarrollo utilizan la introspección para no utilizar dependencias codificadas por programa en otros componentes. La introspección se logra mediante la reflexión y un conjunto de convenios de denominación de métodos e interfaces. La clase BeanInfo da soporte a características adicionales de introspección. Los convenios de denominación que se utilizan para la introspección a veces son denominados "patrones de diseño", que no se deberían confundir con la noción de patrón de diseño en el diseño orientado a objetos.

Persistencia

Un JavaBean puede ser persistente mediante un mecanismo de serialización. La serialización puede ser automática o personalizada dependiendo de si el JavaBean implementa una interfaz serializable o externalizable. JDK 1.4 presenta las clases XMLEncoder y XMLDecoder que se proporcionan para almacenar instancias de JavaBeans en formato XML.

Personalización

La apariencia y comportamiento de un JavaBean se puede personalizar en el momento de diseñarlo. Esto es particularmente importante con JavaBeans visuales que se utilizan en interfaces gráficas de usuario. La personalización se lleva a cabo mediante un editor de propiedades o utilizando personalizadores. Los personalizadores proporcionan una interfaz de usuario personalizada para configurar una instancia de JavaBean en el momento de diseñarlo.

Contexto de bean

El contexto de bean define una jerarquía de contención lógica que permite que los JavaBeans interroguen a su entorno acerca de posibilidades y servicios. Los mecanismos de contexto de bean proporcionan el soporte para la jerarquía de contención lógica y la búsqueda de servicios que los JavaBeans ofrecen en la jerarquía.

JavaBeans™ Activation Framework (JAF)

JAF (Java Activation Framework) es una ampliación Java estándar que permite determinar el tipo de un dato, encapsularlo, o descubrir sus operaciones disponibles y crear instancias de un componente de software que corresponde a la operación deseada en el dato.

Información adicional

Consulte la especificación de la API de JavaBeans, versión 1.01 en la página http://java.sun.com/ para obtener más información sobre los JavaBeans. Siga los enlaces Docs & Training > Java 2 Platform, Standard Edition > Java 2 SDK, SE v1.3 documentation > JavaBeans > JavaBeans Specification.