Was nutzt der Custom Class Loader?

7

Vor kurzem kam ich über die Java Custom Class Loader API. Ich fand eine Verwendung hier drüben, Kamranzafars Blog Ich bin ein bisschen neu im Class Loader-Konzept. Kann jemand im Detail erklären, in welchen Szenarien wir ihn brauchen oder wo wir ihn brauchen?

    
Priyank Doshi 31.05.2012, 07:02
quelle

3 Antworten

22

Custom-Class-Loader sind in größeren Architekturen nützlich, die aus mehreren Modulen / Anwendungen bestehen. Hier sind die Vorteile des benutzerdefinierten Klassenladeprogramms:

  • Bietet modulare Architektur Ermöglicht die Definition mehrerer Klassenladeprogramme, die eine modulare Architektur ermöglichen.
  • Konflikte vermeiden Definiert eindeutig den Gültigkeitsbereich der Klasse innerhalb des Klassenladeprogramms.
  • Unterstützung für Versionierung Unterstützt verschiedene Klassenversionen innerhalb derselben VM für verschiedene Module.
  • Bessere Speicherverwaltung Nicht verwendete Module können entfernt werden, wodurch die von diesem Modul verwendeten Klassen entladen werden, was Speicher aufräumt.
  • Klassen von überall laden Klassen können von überall geladen werden, z. B. Datenbank, Netzwerke, oder sie können sogar spontan definiert werden .
  • Ressourcen oder Klassen dynamisch hinzufügen Mit allen oben genannten Funktionen können Sie dynamisch Klassen oder Ressourcen hinzufügen.
  • Laufzeit, die geänderte Klassen neu lädt Ermöglicht es Ihnen, eine Klassen- oder Klassenlaufzeit neu zu laden, indem Sie einen Kindklassenlader für den eigentlichen Klassenlader erstellen, der die geänderten Klassen enthält.
Ramesh PVK 31.05.2012, 07:43
quelle
11

Die primäre Verwendung besteht in Anwendungsservern, so dass sie zwei Anwendungen ausführen können und keine Klassenkonflikte haben. Wenn Anwendung 1 über eine Klasse mit demselben Namen wie Anwendung 2 verfügt, lädt die Anwendung 1 mit ihrer benutzerdefinierten Klasse ihre Klasse und die Anwendung 2 ihre Klasse.

Auch wenn eine Klasse von einem benutzerdefinierten Klassenlader geladen wird, ist es möglich, diese Klasse von der JVM zu entfernen. Wieder nützlich in Anwendungsservern.

Ein weiterer Einsatzbereich wäre die Instrumentierung - Eine Möglichkeit, aspektorientierte Programmierung zu betreiben oder einige Persistenz-APIs zu verwenden. Mit einem benutzerdefinierten Classloader können Sie den geladenen Klassen Verhalten hinzufügen, bevor sie an die laufende Anwendung übergeben werden.

    
Michael Wiles 31.05.2012 07:13
quelle
2

Java-Klasse-Loader tun genau das, was der Name andeutet: Laden Sie Klassen in den Speicher, damit sie verwendet werden können.

Klassen sind auch mit dem ClassLoader verknüpft, der sie geladen hat.

Custom-Class-Loader eröffnen daher eine Vielzahl interessanter Möglichkeiten:

  • Laden mehrerer Versionen der gleichen Klasse mit verschiedenen Klassenladern (z. B. um mögliche Versionskonflikte aufzulösen)
  • Klassen dynamisch zur Laufzeit laden und entladen
  • Erzeugen neuer Klassen (z. B. JVM-Sprachen wie Clojure verwenden verschiedene Klassenladetricks, um neue kompilierte Klassen zur Darstellung von Clojure-Funktionen zur Laufzeit zu erzeugen)
  • Laden von Klassen aus nicht standardmäßigen Quellen

Normale Java-Anwendungen müssen sich normalerweise nicht um Klassenlader kümmern. Aber wenn Sie ein Framework oder eine Plattform schreiben, die anderen Code hosten müssen, werden sie viel wichtiger / relevanter.

    
mikera 31.05.2012 07:50
quelle

Tags und Links