Introduzione
JavaBean definisce un modello componente per Java semplice ed efficace. L'obiettivo dei JavaBean è di provvedere alle
unità contenute autonomamente e riutilizzabili che possano essere manipolate praticamente dagli sviluppatori o in modo
visivo nei tool di generazione.
I JavaBean possono essere rappresentati da controlli GUI o possono non avere alcuna rappresentazione visiva. Il
linguaggio Java utilizza i JavaBean come controlli GUI per consentirne la gestione nei tool di generazione. In J2EE,
semplici JavaBean vengono utilizzati comunemente dalle JSP, il cui compito consiste nella separazione di presentazioni
in HTML e in codice Java, contenuto nei JavaBean.
Un JavaBean è una classe Java con tre funzioni distintive:
Proprietà di JavaBean
Alle proprietà di un JavaBean è possibile accedere attraverso altri componenti. In particolare, una proprietà è un
valore privato cui si accede tramite metodi set e get, ma può anche essere un valore calcolato. Gli aggiornamenti delle
proprietà possono comportare vari effetti collaterali.
Gli Accessor sono metodi che consentono di accedere alle proprietà. Tali metodi possono essere di tipo get o set e
seguono convenzioni di denominazione:
void setPropertyName(PropertyType value); // setter
PropertyType getPropertyName() // getter
Per una proprietà boolean, un getter può essere:
boolean èPropertyName() // getter per una proprietà boolean
Esempio: Customer Bean
Di seguito viene riportato un esempio di un JavaBean elementare (Customer) con due semplici proprietà: nome ed e-mail.
Notare come le proprietà siano definite mediante la coppia di metodi 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;
}
}
Questi JavaBean semplici sono spesso utilizzati nei JSP, dove consentono il trasporto di valori dalle forme nelle
pagine Web.
Proprietà indicizzate
Oltre a proprietà semplici, che hanno un valore singolo, una proprietà può essere una serie di valori contenuti in una
matrice.
Le proprietà indicizzate possono restituire un valore all'indice specificato, o l'intera matrice di valori.
Le proprietà indicizzate hanno le seguenti firme:
void setPropertyName(int index, PropertyType value); // indexed setter
PropertyType getter(int index); // indexed getter
void setPropertyName(PropertyType values[]); // array setter
PropertyType[]getPropertyName(); // array getter
Proprietà di associazione
Il meccanismo di proprietà di associazione provvede al servizio di notifica quando la proprietà cambia. Gli oggetti
interessati che desiderano ricevere notifica della modifica si registrano in anticipo e quando avviene la modifica
questi ricevono la notifica. In particolare, la notifica avviene mediante un evento generato dal componente con la proprietà di associazione dopo che la
proprietà è stata definita.
Un JavaBean con una proprietà di associazione espone metodi per la registrazione e la cancellazione degli oggetti
interessati, chiamati listener. Gli sviluppatori possono definire i propri meccanismi di notifica, ma le librerie Java
forniscono varie classi di supporto di uso comune nel pacchetto java.beans.
Proprietà vincolate
Le proprietà vincolate sono simili a quelle associate, ma la notifica avviene prima che la proprietà venga definita.
Ciò consente alle parti interessate di respingere le modifiche della proprietà lanciando PropertyVetoException.
Eventi e notifiche
Gli eventi sono funzioni dei JavaBean che consentono ai componenti sviluppati indipendentemente di comunicare con gli
altri distribuendo informazioni circa la modifica di stato. In questo modello alcuni componenti generano eventi, che
sono gestiti da altri componenti, nel ruolo di listener di eventi.
Per supportare questo modello di comunicazione, il modello di componente dei JavaBean fornisce:
-
proprietà che possono generare eventi (proprietà di associazione e vincolate)
-
metodi di registrazione, così che i listener possono registrarsi
-
eventi, che forniscono informazioni sulla modifica
-
listener, che possono reagire all'evento distribuito
I seguenti diagrammi di classe illustrano questi concetti relativi ad un JavaBean chiamato EventSource con una
semplice proprietà int.
Durante la configurazione, listener concreti si registrano con il JavaBean. In un punto successivo, altri oggetti
richiamano il metodo setProperty, che avvierà il processo di notifica creando l'oggetto dell'evento. Il JavaBean
EventSource invocherà il metodo propertyChange su tutti i listener registrati. I listener dell'evento
riceveranno l'evento, ne leggeranno i valori e reagiranno all'evento.
Il seguente diagramma di sequenza illustra l'ordine delle invocazioni:
La notifica dei listener è sincrona rispetto all'istanza di JavaBean, che è la fonte dell'evento, ma il listener
dell'evento può attuare l'elaborazione degli eventi in un altro thread.
Introspezione
L'introspezione è un meccanismo runtime che consente la detenzione delle proprietà,
degli eventi e dei metodi di un JavaBean. L'introspezione è utilizzata dai tool
di sviluppo e da programmi che non utilizzano dipendenze molto codificate su altri componenti. L'introspezione viene
raggiunta tramite riflessione e un insieme di convenzioni per la denominazione di metodi e interfacce. Ulteriori
funzioni di introspezione sono supportate dalla classe BeanInfo. Le convenzioni per la denominazione dei
JavaBean utilizzate per l'introspezione sono talvolta chiamate "pattern di progettazione", ma non devono essere confusi
con la stessa nozione nella progettazione orientata all'oggetto.
Persistenza
Un JavaBean può essere persistente mediante un meccanismo di serializzazione. La serializzazione può essere automatica
o personalizzata, a seconda se il JavaBean implementi interfacce serializzabili o esternabili. JDK 1.4
introduce classi XMLEncoder e XMLDecoder che provvedono alla memorizzazione delle istanze di JavaBean in
formato XML.
Personalizzazione
L'apparenza e il comportamento di un JavaBean può essere personalizzato nel momento della progettazione. Ciò è
particolarmente importante per i JavaBean visivi utilizzati in interfacce utente grafiche. La personalizzazione viene
fatta tramite un editor di proprietà o utilizzando personalizzatori. I personalizzatori forniscono un'interfaccia
utente personalizzata per la configurazione di un'istanza di JavaBean nel momento della progettazione.
BeanContext
BeanContext definisce una gerarchia di contenimento logica che consente ai JavaBean di verificare i servizi e le
capacità dell'ambiente. I meccanismi BeanContext forniscono un supporto per una gerarchia logica di contenimento dei
JavaBean e un controllo dei servizi offerti dai JavaBean nella gerarchia.
JavaBean™ Activation Framework
Il Java Activation Framework è un'estensione Java standard che consente di determinare dei tipi di una parte di dati,
relativa incapsulazione, scoperta delle operazioni disponibili e istanziazione di un componente software che
corrisponde all'operazione desiderata sulla parte di dati.
Ulteriori informazioni
Per ulteriori informazioni, vedere Specifiche API di JavaBean, Versione 1.01 nel sito http://java.sun.com/. Seguire i link a Docs & Training > Java 2 Platform, Standard
Edition > Java 2 SDK, SE v1.3 documentation > JavaBeans > JavaBeans Specification.
|