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/.
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.
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:
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.