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.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Meta meldet Gewinnsprung im ersten Quartal

Der Nettoprofi wächst um 117 Prozent. Auch beim Umsatz erzielt die Facebook-Mutter ein deutliches Plus.…

4 Tagen ago

Maximieren Sie Kundenzufriedenheit mit strategischem, kundenorientiertem Marketing

Vom Standpunkt eines Verbrauchers aus betrachtet, stellt sich die Frage: Wie relevant und persönlich sind…

5 Tagen ago

Chatbot-Dienst checkt Nachrichteninhalte aus WhatsApp-Quellen

Scamio analysiert und bewertet die Gefahren und gibt Anwendern Ratschläge für den Umgang mit einer…

5 Tagen ago

Microsoft stellt kleines KI-Modell Phi-3 Mini vor

Seine Trainingsdaten umfassen 3,8 Milliarden Parameter. Laut Microsoft bietet es eine ähnliche Leistung wie OpenAIs…

5 Tagen ago

Google schließt kritische Sicherheitslücke in Chrome

Sie erlaubt eine Remotecodeausführung außerhalb der Sandbox. Betroffen sind Chrome für Windows, macOS und Linux.

5 Tagen ago

Microsoft beseitigt Fehler im März-Sicherheitsupdate für Exchange Server

Probleme treten vor allem bei Nutzern von Outlook Web Access auf. Das optionale Hotfix-Update für…

5 Tagen ago