Classes BeanInfo e introspecção

Se criar novos componentes ou beans para utilizar no editor visual (por exemplo, adição de componentes à paleta), poderá controlar o respectivo comportamento fornecendo uma classe BeanInfo.

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

Dado que a classe BeanInfo contém informações necessárias somente no momento da concepção, geralmente é mantida por um projecto diferente da classe do bean propriamente dita e não é incluída quando o bean é implementado. O editor visual para Java utiliza um número de regras que permitem associar classes BeanInfo aos Java beans que descreverem. É necessário compreender estas regras se utilizar Java beans que tenham classes BeanInfo que pretenda que o editor visual detecte. Por exemplo, se utilizar um conjunto de classes Java beans de outro fabricante ou se tiver programado Java beans e classes BeanInfo que estiver a utilizar.

Para saber mais sobre classes BeanInfo, pode descarregar a especificação dos JavaBeans em java.sun.com/products/javabeans/docs/.

Historial

A classe java.beans.Introspector utiliza-se para localizar uma classe BeanInfo para um Java bean. O momento em que tal ocorre chama-se introspecção, e é efectuada pelo editor visual da primeira vez que for utilizado um bean. Por exemplo, quando um botão é largado da paleta pela primeira vez, a introspecção ocorre a tentar localizar a classe BeanInfo correcta. Depois de introspectar o bean, os resultados são colocados em memória cache para ajudar ao rendimento. Todavia, quando o editor visual detecta que a classeBeanInfo poderá ter sido alterada e a memória cache está estagnada, ocorrerá nova introspecção.

A introspecção de um bean realiza-se chamando o método estático getBeanInfo(Class) com a classe do bean como argumento. Por exemplo:

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

O introspector utiliza testes para localizar a classe BeanInfo para a classe de argumento MeuJavaBean. Se um teste for satisfatório, o introspector pára de procurar. Se falhar algum passo, o introspector tenta o teste seguinte para localizar a classe BeanInfo. O introspector utiliza os seguintes testes lógicos:

Se for detectada uma classe BeanInfo para a classe, o introspector não a devolve explicitamente. Em contrapartida, utiliza os seus detalhes para criar uma classe de resultados temporária que implemente java.beans.BeanInfo.

Caminho de pesquisa BeanInfo

A melhor forma de compreender o caminho BeanInfo consiste em considerar a máquina virtual Java que é criada para executar introspecção. Esta máquina virtual recebe um caminho de classes que é constituído pelas seguintes entradas:

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

Os argumentos para este método são:

BeanInfo e atributos inerentes

Se o bean que estiver a escrever herdar atributos de uma superclasse, a BeanInfo predefinida não expõe os atributos inerentes. É necessário expô-los explicitamente com o método getAdditionalBeanInfo().

Por exemplo:

public BeanInfo[] getAdditionalBeanInfo() {
try {                 
         // O que se segue apresentará todas as funções herdadas.               
         return new BeanInfo[] {
Introspector.getBeanInfo(MeuPainel.class.getSuperclass())};
} catch (IntrospectionException e) {            
return new BeanInfo[0];            
} 

Se um atributo inerente não for exposto, o editor visual não o apresenta, mesmo que esteja definido no código fonte.

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