Önelemzés és a JavaBean komponensmodell Kozsik Tamás [email protected]http://kto.web.elte.hu/ Eötvös Loránd Tudományegyetem Programozási Nyelvek és Fordítóprogramok Tanszék 2008. Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
36
Embed
Önelemzés és a JavaBean komponensmodellkto.web.elte.hu/hu/oktatas/java/material/reflection.pdf · Önelemzés Introspection, reflection Futás közben vizsgáljuk a kódot Aktiválhatjuk
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Betöltés során adódó hibák
Ha nem található a classpath alapján a class fájljava.lang.ClassNotFoundException
Szerkesztési hibákjava.lang.LinkageError
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Generikus Class
A Java 5-tol kezdve a Class osztály generikusAz String típus típusleíró objektuma példáulClass<String> típusúCsak fordítás során „létezik” a típusparaméterTípushelyettesítopublic final Class<?> Object.getClass()public static Class<?> Class.forName(String)
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Módosítók lekérdezése
Az annotációk erre a célra való muveletekkelA nem-annotáció módosítószók maszkolással
Minden módosítónak megfelel egy int konstansLekérdezés→ intpublic int getModifiers()Az int-bol maszkolásEgyszerubben: speciális muveletekkel, pl.public static boolean isStatic(int mod)
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Publikusság
Publikus információkgetMethods(), getFields(), ...Örököltek is
Minden információgetDeclaredMethods(), getDeclaredFields(), ...Örököltek nem
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Listázás és kikeresés
Bizonyos információk alapján kikeresgetMethod(String,Class<?>...)getField(String)stb.
Kilistázza az összesetgetMethods()getFields()stb.
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Objektumok létrehozása
Class.newInstanceCsak paraméter nélküli konstruktoron keresztül megyA kivételellenorzési mechanizmusnak keresztbevág(propagálja a kivételeket)Probléma a hozzáféréssel
Constructor.newInstanceÚjabb lehetoségParaméterezheto – nem csak paraméter nélkülikonstruktort lehet így hívniA kivételeket csomagolja(InvocationTargetException)AccessibleObject alapon kérheto privát hozzáférés
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
AlkotóelemeikMódosítók, annotációkKiváltható kivételekParamétertípusokVisszatérési érték típusaTípusparaméterek (ha sablon)Alapértelmezett érték (ha annotációelem)
TulajdonságokisBridge()isSynthetic()isVarArgs()
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Típustörlés
import java.lang.reflect.Method;
public class Trouble<T> {
public void lookup(T t) {}public void find(Integer i) {}
public static void main(String... args)throws Exception {
Trouble<?> obj = new Trouble<Integer>();Class<?> c = obj.getClass();String mName = args[0];Class cArg = Class.forName(args[1]);Method m = c.getMethod(mName, cArg);System.out.println(m.toGenericString());
}
}
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
NegatívumKöltséges (végrehajtási ido)Futási ideju hibák
nem talál valamitnincs joga valamihez (security manager)
Biztonsági problémákprivát tagokhoz hozzáférés
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Mire használjuk
Elore nem ismert kódot manipuláló kód írásánálKeretrendszerekJavaBeansEnterprise JavaBeansVizuális szerkesztokNyomkövetok, log-rendszerek, profilozókDinamikus kódtranszformáció
Generatív programozásKóddal paraméterezheto kód
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
JDBC-s példa
Adatbázist használó programAz adatbáziskezelo lelkét ismero komponensFüggetlenek egymástól
JDBC-driver betöltése a kódbaClass.forName(args[0]);
JDBC-driver nevének átadása$ javac MyApp.java$ java MyApp com.mysql.jdbc.Driver
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
JavaBeans
Programozási konvencióknak megfelelo osztályoksetter/getter alapján „property”-ktulajdonságszerkesztok, -konfigurálókeseményvezérelt viselkedés, figyelok (listener)
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell
Osztálybetölto
A dinamikus szerkesztés elso lépése a betöltésEgy virtuális gépben több betölto is lehetKonfigurálhatók, programozhatókEgy betöltött kód tulajdonságai függnek a használtbetöltotol (pl. security)
Kozsik Tamás [email protected] http://kto.web.elte.hu/ Önelemzés és a JavaBean komponensmodell