BeanInfo osztályok és belső elemzés

A szerkesztőn belüli használatra szánt új összetevők és komponensek, például új paletta-összetevők létrehozása esetén az új elem viselkedését egy BeanInfo osztály megadásával szabályozhatja.

A BeanInfo osztályok a java.beans.BeanInfo felületet valósítják meg. A vizuális szerkesztő ezek segítségével határozza meg a komponens tulajdonság nézetének viselkedését, illetve megállapítja, hogy rendelkezésre áll-e egyéniesítő. A vizuális szerkesztő a szabványos AWT és Swing osztályokhoz tartozó BeanInfo osztályokat alapértelmezésben tartalmazza.

Mivel a BeanInfo osztály által biztosított információk csak tervezési időben szükségesek, célszerű ezeket a komponens osztálytól elkülönített projektben tárolni, és a komponens kibocsátásakor kihagyni az összeépítésből. A Visual Editor for Java számos olyan szabályt tartalmaz, melyek segítségével a BeanInfo osztályt hozzárendelheti a megfelelő Java komponenshez. Ha a komponensekhez a vizuális szerkesztő által felismerhető BeanInfo osztályokat kíván készíteni, akkor feltétlenül meg kell ismernie ezeket a szabályokat. Erre szükség lehet például egy harmadik féltől származó vagy saját fejlesztésű Java komponenskészlet használata esetén.

A BeanInfo osztályokkal kapcsolatban további információkat a java.sun.com/products/javabeans/docs/ címről letölthető JavaBeans specifikációban talál.

Háttér

Egy adott Java komponenshez tartozó BeanInfo osztály megkeresésére a java.beans.Introspector osztály használható. Ez akkor történik meg, amikor a vizuális szerkesztő először használ egy komponenst; a folyamat neve belső elemzés. Például amikor a felhasználó először húz le egy gombot a palettáról, akkor a vizuális szerkesztő végrehajtja a belső elemzést, és megpróbálja megkeresni a megfelelő BeanInfo osztályt. A komponens belső ellenőrzése után az eredmények a teljesítmény javítása érdekében a gyorsítótárba kerülnek. Ha azonban a vizuális szerkesztő úgy ítéli meg, hogy a BeanInfo osztály megváltozott, és a gyorsítótár tartalma elavult, akkor ismét végrehajtja az önelemzést.

A komponens belső elemzését a getBeanInfo(Class) statikus metódus végzi, melynek argumentuma a komponensosztály. Például:

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

A belső elemző a tesztek segítségével kikeresi a SajatJavaBean argumentumosztályhoz tartozó BeanInfo osztályt. Ha valamelyik teszt sikeres, akkor a belső elemző abbahagyja a keresést. Ha a lépés meghiúsul, akkor a belső elemző a következő teszt segítségével próbálja megkeresni a BeanInfo osztályt. A belső elemző a következő logikai teszteket használja:

Ha a belső elemző meg is találja az osztályhoz tartozó BeanInfo osztály, akkor sem adja vissza azt explicit módon. Ehelyett az általa szolgáltatott részletek alapján példányosít egy a java.beans.BeanInfo osztályt megvalósító ideiglenes eredményosztályt.

BeanInfo keresési útvonal

A BeanInfo elérési út megértéséhez meg kell vizsgálni a belső elemzés végrehajtására létrehozott virtuális gépet. A virtuális gép osztályútvonala a következő bejegyzéseket tartalmazza:

A virtuális gép létrehozása után a java.beans.Introspector a public void setSearchPath(String[]) metódussal állítja be azon csomagok listáját, amelyekben a BeanInfo osztályokat keresni kell.

A metódus argumentumai:

BeanInfo és öröklött jellemzők

Az alapértelmezett BeanInfo nem tartalmazza a komponens szülőosztálytól öröklött attribútumait. Ezeket explicit módon kell felfedni a getAdditionalBeanInfo() metódussal.

Például:

public BeanInfo[] getAdditionalBeanInfo() {
try {                 
         // Az alábbi hívás az összes öröklött tulajdonságot visszaadja.                 
         return new BeanInfo[] { 
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};  
} catch (IntrospectionException e) {            
return new BeanInfo[0];            
} 

A fel nem fedett öröklött attribútumokat a vizuális szerkesztő akkor sem dolgozza fel, ha azok egyébként be vannak állítva forráskódban.

(C) Copyright IBM Corporation 1999, 2004. Minden jog fenntartva.