Clases BeanInfo e introspección

Si se crean componentes nuevos o beans para su uso en el editor visual (por ejemplo, añadir componentes a la paleta), puede controlar el comportamiento proporcionando una clase BeanInfo.

Una clase BeanInfo implementa java.beans.BeanInfo y es utilizada por el editor visual para determinar el comportamiento de la vista de propiedades del bean y si hay disponible un personalizador. El editor visual incluye clases BeanInfo para controles AWT y Swing comunes.

Como la clase BeanInfo contiene información necesaria sólo en tiempo de diseño, se suele guardar en un proyecto distinto de la propia clase bean, y no se incluye cuando se despliega el bean. El editor visual para Java utiliza una serie de reglas que le permiten asociar clases BeanInfo con los Beans de Java que describen. Es necesario comprender estas reglas si se utilizan Beans de Java que tengan clases BeanInfo y que se quiera que el editor visual las detecte. Por ejemplo, si se utiliza un conjunto de clases bean de Java de terceras partes o si ha desarrollado los beans de Java y clases BeanInfo que está utilizando.

Para más información sobre clases BeanInfo, puede descargar la especificación de JavaBeans en http://java.sun.com/products/javabeans/docs/.

Trasfondo

La clase java.beans.Introspector se utiliza para localizar una clase BeanInfo para un bean de Java. El momento en que esto ocurre se denomina introspección, y lo realiza el editor visual la primera vez que se utiliza un bean. Por ejemplo, cuando se borra un botón de la paleta por primera vez, se produce una introspección que intenta localizar la clase BeanInfo correcta. Tras realizar la introspección en el bean, el resultado se coloca en antememoria para mejorar el rendimiento. No obstante, cuando el editor visual detecta que la clase BeanInfo puede haber cambiado y la antememoria es obsoleta, se vuelve a producir la introspección.

La introspección de un bean se realiza mediante la invocación del método estático getBeanInfo(Class) con la clase bean como argumento. Por ejemplo:

java.beans.Introspector.getBeanInfo(MyJavaBean.class)

El introspector utiliza la lógica siguiente para localizar una clase BeanInfo para la clase de argumento MyJavaBean. Esto implica una serie de pasos secuenciales; en cuanto alguno de los pasos es correcto, el introspector deja de buscar. Si algún paso no es correcto, se utiliza el siguiente, para intentar una forma distinta de localizar la información de bean (bean info).

Si se encuentra una clase BeanInfo para la clase, el introspector no la devuelve de forma explícita. En su lugar, utiliza los detalles para crear una clase de resultado temporal que implementa java.beans.BeanInfo.

Vía de acceso de búsqueda de BeanInfo

La mejor manera de comprender la vía de acceso de BeanInfo es considerar la máquina virtual Java (JVM) que se crea para realizar la introspección. A esta máquina virtual se le proporciona una vía de acceso de clases que está compuesta por las entradas siguientes:

Teniendo la máquina virtual creada, java.beans.Introspector tiene su lista de paquetes para la búsqueda de clases BeanInfo establecidas con el método public void setSearchPath(String[]).

Los argumentos de este método son:

BeanInfo y atributos heredados

Si el bean que se está escribiendo hereda atributos de una superclase, el BeanInfo por omisión no pondrá a disposición los atributos inherentes. Hay que hacerlo de forma explícita con el método getAdditionalBeanInfo().

Por ejemplo:

public BeanInfo[] getAdditionalBeanInfo() {
try {                 
         // A continuación se obtienen todas las características heredadas.                 
         return new BeanInfo[] {
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};
} catch (IntrospectionException e) {            
return new BeanInfo[0];            
} 

Si no se pone a disposición un atributo inherente, el edito visual no lo procesará, incluso aunque esté establecido en el código fuente.

Tema padre: Ampliación del editor visual

Tareas relacionadas
Control de la información de BeanInfo para desarrolladores de conectores (plug-in)
Especificación de la ubicación de las clases BeanInfo

(C) Copyright IBM Corporation 1999, 2004. Reservados todos los derechos.