Classi BeanInfo e introspezione

Se si creano nuovi componenti o bean da utilizzare all'interno dell'editor visuale (ad esempio, aggiungendo componenti alla tavolozza), è possibile controllarne il funzionamento fornendo una classe BeanInfo.

La classe BeanInfo implementa java.beans.BeanInfo ed è utilizzata dall'editor visuale per determinare il funzionamento della vista delle proprietà del bean e stabilire l'eventuale disponibilità di un customizer. L'editor visuale dispone di classi BeanInfo anche per i controlli AWT e Swing comuni.

Poiché la classe BeanInfo contiene informazioni richieste solo in fase di progettazione, viene tenuta solitamente in un progetto diverso dalla classe bean stessa e non viene inclusa alla distribuzione del bean. L'editor visuale per Java si avvale di numerose regole che consentono di associare le classi BeanInfo ai bean Java da esse descritti. E' opportuno comprendere queste regole se si utilizzano bean Java che dispongono di classi BeanInfo che l'editor visuale dovrà rilevare. Un esempio è il caso in cui si utilizza un insieme di classi bean Java di altri produttori oppure sono stati sviluppati bean Java e classi BeanInfo di cui si fa uso.

Per ulteriori informazioni sulle classi BeanInfo, è possibile effettuare il download della specifica JavaBeans dal sito all'indirizzo java.sun.com/products/javabeans/docs/.

Informazioni di fondo

La classe java.beans.Introspector è utilizzata per individuare una classe BeanInfo di un bean Java. L'operazione corrispondente è nota con il nome di introspezione e viene eseguita dall'editor visuale quando un bean è utilizzato per la prima volta. Quando si trascina per la prima volta un pulsante dalla tavolozza, ad esempio, viene eseguita l'introspezione per tentare di individuare la classe BeanInfo appropriata. Al termine dell'introspezione del bean, il risultato viene memorizzato nella cache per favorire le prestazioni. Nel momento in cui, però, l'editor visuale rileva che la classe BeanInfo può essere variata e che la cache non è aggiornata, l'introspezione viene eseguita ancora una volta.

L'introspezione di un bean viene eseguita richiamando il metodo static getBeanInfo(Class) e utilizzando la classe bean come argomento. Ad esempio:

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

L'introspector utilizza la logica illustrata di seguito per individuare una classe BeanInfo per la classe di argomento MyJavaBean. L'operazione implica una serie di fasi sequenziali; dopo una fase con esito positivo, l'introspector interrompe la ricerca. Se una fase ha esito negativo, la fase successiva verrà utilizzata per trovare un modo diverso di individuare le informazioni relative al bean.

Se viene trovata una classe BeanInfo per la classe, l'introspector non la restituisce in modo esplicito. Ne utilizza, invece, i dettagli per creare una classe di risultati temporanea che implementa java.beans.BeanInfo.

Percorso di ricerca BeanInfo

Il modo migliore per conoscere meglio il percorso BeanInfo consiste nel prendere in considerazione la Java Virtual Machine creata per eseguire l'introspezione. A questa Virtual Machine è assegnato un percorso di classi composto dai seguenti elementi:

Una volta creata la Virtual Machine, java.beans.Introspector disporrà di un proprio elenco di pacchetti in cui ricercare le classi BeanInfo impostato con il metodo public void setSearchPath(String[]).

gli argomenti di questo metodo sono:

BeanInfo e attributi inerenti

Se il bean che si sta scrivendo eredita attributi da una superclasse, la classe BeanInfo predefinita non esporrà gli attributi inerenti. Sarà necessario esporli in modo esplicito con il metodo getAdditionalBeanInfo().

Ad esempio:

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 un attributo inerente non è esposto, l'editor visuale non ne effettuerà il rendering, anche se è impostato nel codice di origine.

Argomento principale: Estensione dell'editor visuale per Java

Attività correlate
Modalità di controllo delle informazioni BeanInfo per gli sviluppatori di plug-in
Indicazione del percorso delle classi BeanInfo

(C) Copyright IBM Corporation 1999, 2004. Tutti i diritti riservati.