Mit maßgeschneiderten Klassenladern lästige Fehler in Java vermeiden

Mit Ausnahme des Bootstrap-Klassenladers werden alle Klassenlader von einer übergeordneten Klasse abgeleitet. Im Wesentlichen ist das genau die Klassenlader-Instanz, die wiederum den betreffenden Klassenlader geladen hat. Das Wichtigste dabei ist, diesen sogenannten Parent-Klassenlader korrekt festzulegen. Danach kann man die Methode getParent() des Klassenladers verwenden, um Anfragen nach Klassen an ihn weiterzuleiten. Das empfiehlt sich beispielsweise, wenn der eigene Klassenlader mit den spezifizierten Methoden eine Klasse nicht finden kann. Den Parent-Klassenlader muss man im Konstruktor als Parameter für den java.lang.ClassLoader-Konstruktor angeben:


Die Methode loadClass(String name) bildet den Einstiegspunkt für den Klassenlader. Der Parameter name ist dabei ein vollständig qualifizierter Klassenname (FQCN), also ein Klassenname samt Paketangabe. Ist der Parent-Klassenlader korrekt angegeben, wird er zuerst gefragt, wenn MyClassLoader eine Klasse per loadClass(String name) laden soll, diese aber nicht findet.

Falls der übergeordnete Klassenlader die Klasse auch nicht finden kann, wird die Methode findClass(String name) aufgerufen. Die Standardimplementierung von findClass(String name) löst normalerweise den Ausnahmefehler ClassNotFoundException aus. Die meisten Entwickler dürften mit diesem schon hinreichend Bekanntschaft gemacht haben. Entwickler von eigenen Klassenladern sollten diese Methode aufheben, wenn sie java.lang.ClassLoader übernehmen.

Zweck der Methode findClass() ist es, allen speziellen Code für MyClassLoader aufzunehmen, ohne sonstigen Code zu duplizieren, etwa beim Aufruf des System-Klassenladers, wenn der eigene Klassenlader nicht funktioniert. Bei dieser Methode muss der Klassenlader den Bytecode von einer beliebigen Quelle abrufen können. Sobald der Bytecode abgerufen ist, sollte die Methode defineClass() aufgerufen werden. Es ist extrem wichtig, welche Klassenlader-Instanz die Methode für die geladene Klasse aufgerufen hat. Wenn also zwei Klassenlader-Instanzen Bytecode aus derselben Quelle oder unterschiedlichen Quellen definieren, werden die definierten Klassen als unterschiedlich behandelt.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Mit maßgeschneiderten Klassenladern lästige Fehler in Java vermeiden

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *