Mit ClassLoader Klassen mehrfach laden

MichaelW

Mitglied
Hallo zusammen,

Ich speicher die Klassennamen (also package + classname), die in meiner Anwendung verwendet werden können, in einer DB (es handelt sich darum um Klassen, die eine Komponente der Anwendung repräsentieren).
Nun möchte ich prüfen, ob die Klassennamen, die in der DB liegen, auch "in echt" in meinem Projekt existieren.

Mein bisheriges Vorgehen was so, dass ich mit Class.forName(className) nach der Klasse suche und wenn eine Exception fliegt weiss ich, dass die Klasse nicht (mehr) da ist (bzw. umbenannt wurde)...

Nun ist das Problem, dass Class.forName() nach dem ersten Aufruf die Klassen in einem Cache hält. D.h. wenn ich nach der ersten Prüfung testweise eine Klasse lösche, dann findet Class.forName() die Klasse trotzdem, weil sie noch im Cache vorhanden ist.

Habt ihr eine Idee wie ich das implementieren könnte?

Gruß
Micha
 
Hallo,

du musst die Klassen immer mit einem neuen ClassLoader (beispielsweise URLCLassLoader) laden wenn du diese mehrfach laden möchtest. Klassen kann man nur implizit entladen lassen (in dem keine Instanzen dieser Klasse mehr existieren, nicht mehr auf diese Klasse verwiesen wird UND der ClassLoader der die Klasse geladen hat gc'ed wurde).

Gruß Tom
 
Zurück