Conceitos: JavaBean
Tópicos
Introdução
JavaBeans define um modelo de componente simples e eficaz para Java. O objetivo dos
JavaBeans é fornecer unidades independentes e reutilizáveis que possam ser manipuladas
através de programação pelos desenvolvedores ou visualmente em ferramentas do construtor.
Eles podem ser controles da GUI ou podem ser representação visual ausente.
Os controles da GUI em Java são normalmente JavaBeans para serem manipulados pelas
ferramentas do construtor. No J2EE, JavaBeans simples são comumente utilizados a partir das JSPs, nas quais
possibilitam separação de apresentação em HTML e no código Java, que
está contido nos JavaBeans.
Um JavaBean é uma classe Java com três recursos distintos:
Propriedades do JavaBean
As propriedades de um JavaBean podem ser acessadas por outros componentes. Normalmente, uma propriedade
é um valor privado acessado por meio dos métodos setter e getter, mas também
pode ser um valor calculado. As atualizações das propriedades podem ter vários efeitos secundários.
Acessores são métodos para acessar propriedades. Eles podem ser getters e
setters e seguem as convenções de nomenclatura:
void setPropertyName(PropertyType value); // setter
PropertyType getPropertyName() // getter
Para uma propriedade booleana, um getter pode ser:
boolean isPropertyName()
// getter for a boolean property
Exemplo: Bean do Cliente
A seguir, um exemplo de um JavaBean (Cliente) simples com duas propriedades
simples: name e email. Observe como as propriedades são definidas por meio dos
pares de métodos set/get.

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;
}
}
Esses JavaBeans simples são freqüentemente utilizados nas JSPs, nas quais ativam o transporte de
valores de formulários nas páginas da Web.
Propriedades Indexadas
Além das propriedades simples, que apresentam um único valor, uma propriedade pode ser um conjunto
de valores contidos em uma matriz.
As propriedades indexadas podem retornar um valor no índice especificado ou toda
a matriz de valores.
As propriedades indexadas possuem as seguintes assinaturas:
void setPropertyName(int
index, PropertyType value); // indexed setter
PropertyType getter(int index); // indexed getter
void setPropertyName(PropertyType values[]); // array setter
PropertyType[]getPropertyName(); // array getter
Propriedades do Limite
O mecanismo da propriedade do limite possibilita serviço de notificação quando a propriedade é alterada.
Os objetos interessados que desejam ser notificados da alteração, registram-se antecipadamente
e, quando a alteração da propriedade ocorrer, os objetos registrados receberão a notificação. Normalmente, essa notificação é feita por meio de um evento disparado
pelo componente com a propriedade do limite após a definição da propriedade.
Um JavaBean com uma propriedade do limite expõem métodos para registro e cancelamento de registro
de objetos interessados, chamados listeners. Os desenvolvedores podem definir seu próprio
mecanismo de notificação, mas as bibliotecas Java fornecem várias classes de
suporte comumente utilizadas no pacote java.beans.
Propriedades Limitadas
As propriedades limitadas são semelhantes às propriedades do limite, mas a notificação
acontece antes da real definição da propriedade. Isso permite às partes interessadas
rejeitar a alteração da propriedade lançando uma PropertyVetoException.
Eventos e Notificação
Eventos são o recurso dos JavaBeans que permite que os componentes desenvolvidos
independentemente comuniquem-se entre si pela propagação de informações sobre a
alteração de estado. Nesse modelo, alguns componentes disparam eventos, que são manipulados
por outros componentes, na função dos listeners de eventos.
Para suportar esse modelo de comunicação, o modelo de componente JavaBeans fornece:
- propriedades que podem disparar eventos (propriedades do limite e limitadas),
- métodos de registro, para que os listeners possam registrar-se,
- eventos, que transportam informações sobre a alteração e
- listeners, que podem reagir no evento entregue.
O diagrama de classe a seguir ilustra esses conceitos para um JavaBean chamado
EventSource com uma propriedade int simples.

Durante a configuração, os listeners concretos registram-se com o JavaBean. Em algum
outro momento, algum outro objeto chama o método setProperty, que
iniciará o processo de notificação, criando o objeto de evento. O JavaBean
EventSource chamará o método propertyChange em todos os listeners registrados.
Os listeners de eventos receberão o evento, lerão os valores e reagirão no
evento.
O diagrama de seqüência a seguir ilustra a ordem de chamadas:

A notificação de listeners é síncrona em relação à instância de JavaBean,
que é a origem do evento, mas o listener de evento pode realizar o processamento de eventos em outro encadeamento.
Introspecção
Introspecção é um mecanismo de tempo de execução que ativa a detecção de propriedades, eventos e métodos de um JavaBean. Ela é utilizada pelas ferramentas de desenvolvimento e por
programas que não utilizam dependências codificadas permanentemente em outros componentes. Ela é alcançada por meio de reflexão e de um conjunto de convenções para nomenclatura de métodos e
interfaces. Recursos adicionais de introspecção são suportados pela classe BeanInfo. As convenções de nomenclatura JavaBeans utilizadas para introspecção são, às vezes, chamadas de
"padrões de design", mas não devem ser confundidas com a noção de padrão de design no design orientado a objetos.
Persistência
Um JavaBean pode ser persistido por meio de um mecanismo de serialização. A serialização
pode ser automática ou personalizada, dependendo de o JavaBean implementar interfaces Serializáveis
ou Externalizáveis. O JDK 1.4 introduz as classes XMLEncoder e
XMLDecoder que possibilitam o armazenamento de instâncias de JavaBeans no
formato XML.
Personalização
A aparência e comportamento de um JavaBean podem ser personalizadas no tempo de design. Isso é especialmente importante para JavaBeans visuais que são utilizados em
interfaces gráficas com o usuário. A personalização é feita por meio de um editor de propriedade, utilizando personalizadores.
Os personalizadores fornecem uma interface com o usuário personalizada para a configuração de uma instância de JavaBean no tempo de design.
BeanContext
BeanContext define uma hierarquia de restrição lógica que permite aos JavaBeans
consultar seu ambiente sobre recursos e serviços. Seus
mecanismos fornecem suporte para a hierarquia de restrição lógica de JavaBeans e
para a consulta de serviços oferecidos pelos JavaBeans na hierarquia.
JavaBeans™ Activation Framework
O Java Activation Framework é uma extensão Java padrão que permite a determinação
do tipo de uma parte de dados, seu encapsulamento, descoberta de suas operações
disponíveis e a instanciação de um componente de software que corresponde à
operação desejada na parte de dados.
Informações Adicionais
Para obter informações adicionais sobre os JavaBeans, consulte JavaBeans API Specification, Versão
1.01 em http://java.sun.com/. Siga os
links para Docs & Training > Java 2 Platform, Standard Edition >
Java 2 SDK, SE v1.3 documentation > JavaBeans > JavaBeans Specification.
|