BeanInfo-klasser och introspektion

Om du skapar nya komponenter eller bönor för användning i den visuella redigeraren (till exempel lägger till komponenter i paletten) kan du kontrollera deras funktion genom att lägga till en BeanInfo-klass.

En BeanInfo-klass implementerar java.beans.BeanInfo och används i den visuella redigeraren till att bestämma funktionen i egenskapsvyn för bönan och om en anpassare är tillgänglig. I den visuella redigeraren ingår BeanInfo-klasser för gemensamt AWT och Swing-kontroller.

Eftersom BeanInfo-klassen innehåller information som endast krävs i designläge finns den vanligen i ett annat projekt än själva bönklassen och tas inte med när bönan utplaceras. I den visuella redigeraren för Java används ett antal regler där du kan associera BeanInfo-klasser med de Java-bönor som beskrivs i dem. Du måste förstå de här reglerna om du använder Java-bönor som har BeanInfo-klasser som du vill ska upptäckas i den visuella redigeraren. Till exempel om använder en tredjepartsuppsättning av Java-bönklasser eller om du har utvecklat Java-bönor och BeanInfo-klasser som du använder.

Om du vill ha mer information om BeanInfo-klasser kan du hämta JavaBeans-specifikationen från java.sun.com/products/javabeans/docs/.

Bakgrund

Klassen java.beans.Introspector används till att söka efter en BeanInfo-klass för en Java-böna. Det kallas introspektion när det här inträffar. Det görs i den visuella redigeraren första gången en böna används. Till exempel när en knapp släpps för första gången från paletten sker introspektion där sökning efter rätt BeanInfo-klass görs. Efter introspektion av bönan cachas resultatet vilket ger bättre prestanda. När den visuella redigeraren upptäcker att BeanInfo-klassen har ändrats och att cachen är gammal sker introspektion igen.

Introspektion av en böna sker genom anrop av den statiska metoden getBeanInfo(Class) med bönklassen som argument. Exempel:

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

I introspektionsfunktionen används tester till att söka efter en BeanInfo-klass för argumentklassen MyJavaBean. Om ett test lyckas avaktiveras sökningen i introspektionsfunktionen. Om ett test misslyckas görs nästa test för att hitta BeanInfo-klassen. I introspektionsfunktionen används följande logiska test:

Om en BeanInfo-klass hittas för klassen returneras den inte explicit. Informationen för den används i stället till att skapa en tillfällig resultatklass där java.beans.BeanInfo implementeras.

BeanInfo-sökväg

Det bästa sättet att förstå BeanInfo-sökvägen är att granska den Java Virtual Machine som skapas för att utföra introspektion. Den här Java Virtual Machine får en klassökväg som består av följande objekt:

När Java Virtual Machine skapats har java.beans.Introspector en lista med paket där sökning efter BeanInfo-klasser som angetts med metoden public void setSearchPath(String[]) kan göras.

Argumenten till den här metoden är:

BeanInfo och egna attribut

Om den böna du skriver ärver attribut från en överordnad klass visas inte de egna attributen i standard-BeanInfo. Du måste visa demexplicit med metoden getAdditionalBeanInfo().

Exempel:

public BeanInfo[] getAdditionalBeanInfo() {
try {                 
         // Med det följande returneras alla egna funktioner.                
         return new BeanInfo[] { 
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};  
} catch (IntrospectionException e) {            
return new BeanInfo[0];            
} 

Om ett eget attribut inte visas renderar den visuella redigeraren det inte även om det är angett i källkoden.

(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved.