Classes BeanInfo e Introspecção

Se você estiver criando novos componentes ou beans para serem utilizados no visual editor (por exemplo, incluindo componentes na paleta), será possível controlar o comportamento deles, fornecendo uma classe BeanInfo.

Uma classe BeanInfo implementa java.beans.BeanInfo e é utilizada pelo visual editor para determinar o comportamento da visualização de propriedades para o bean e se um personalizador está disponível. O visual editor inclui classes BeanInfo para controles AWT e Swing comuns.

Como a classe BeanInfo contém informações requeridas apenas na hora do design, ela é, geralmente, mantida em um projeto diferente da classe do bean em si e não é incluída quando o bean é implementado. O visual editor para Java utiliza várias regras que permitem associar classes BeanInfo aos beans Java que elas descrevem. Será necessário entender essas regras se você estiver utilizando beans Java tendo classes BeanInfo que você deseja que o visual editor detecte. Por exemplo, se você estiver utilizando um conjunto de terceiros de classes Java bean ou se tiver desenvolvido beans Java e classes BeanInfo que está utilizando.

Para aprender mais sobre as classes BeanInfo, você pode fazer download da especificação JavaBeans a partir de java.sun.com/products/javabeans/docs/.

Segundo Plano

A classe java.beans.Introspector é utilizada para localizar uma classe BeanInfo para um Java bean. A hora em que isso ocorre é mencionada como introspecção e é feita pelo visual editor na primeira vez que um bean é utilizado. Por exemplo, quando um botão é solto pela primeira vez da paleta, ocorre uma introspecção que tenta localizar a classe BeanInfo correta. Depois da introspecção do bean, os resultados são armazenados em cache para ajudar no desempenho. Porém, quando o visual editor detecta que a classe BeanInfo pode ter sido alterada e o cache é stale, a introspecção ocorrerá novamente.

A introspecção de um bean é feita chamando o método estático getBeanInfo(Class) com a classe bean como o argumento. Exemplo:

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

O introspector utiliza testes para localizar uma classe BeanInfo para a classe de argumento MyJavaBean. Se qualquer teste obtiver êxito, o introspector pára de procurar. Se uma etapa falhar, o introspector tenta o próximo teste para localizar a classe BeanInfo. O introspector utiliza os seguintes testes lógicos:

Se uma classe BeanInfo for localizada para a classe, o introspector não a retornará explicitamente. Em vez disso, ele utiliza seus detalhes para criar uma classe de resultados temporários que implementa java.beans.BeanInfo.

Caminho da Procura de BeanInfo

A melhor maneira de entender o caminho de BeanInfo é considerar a máquina virtual Java que é criada para executar a introspecção. Essa máquina virtual recebe um caminho de classe que é formado pelas seguintes entradas:

Tendo criado a máquina virtual, o java.beans.Introspector tem sua lista de pacotes para procurar classes BeanInfo definidas com o método public void setSearchPath(String[]).

Os argumentos para esse método são:

BeanInfo e Atributos Próprios

Se o bean que você está gravando estiver herdando atributos de uma superclasse, o BeanInfo padrão não exporá os atributos próprios. Será necessário expô-los explicitamente com o método getAdditionalBeanInfo().

Exemplo:

public BeanInfo[] getAdditionalBeanInfo() { 
try {                 
         // The following will return all inherited features.                 
         return new BeanInfo[] { 
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};  
} catch (IntrospectionException e) {            
return new BeanInfo[0];            
} 

Se um atributo próprio não for exposto, o visual editor não irá apresentá-lo, mesmo que ele seja definido no código fonte.

(C) Direitos Autorais IBM Corporation 1999, 2004. Todos os direitos reservados.