Java: Wie kann der übergeordnete Delegierungsmechanismus des Klassenladers unterbrochen werden?

Der Schwerpunkt dieses Artikels

Wir haben die LoadClass-Methode zuvor analysiert und können feststellen, dass die Logik dieser Methode der übergeordnete Delegierungsmechanismus ist. Das heißt, solange diese Methode nicht zerstört wird, wird der übergeordnete Delegierungsmechanismus nicht zerstört. Wenn wir den übergeordneten Delegationsmechanismus zerstören möchten, müssen wir die LoadClass-Methode in der Klasse neu schreiben. Solange dies der Fall ist, wird der übergeordnete Delegationsmechanismus nicht verwendet.

Den elterlichen Delegationsmechanismus unterbrechen oder nicht

Wenn wir also einen Klassenlader (von ClassLoader geerbt) anpassen möchten und den übergeordneten Delegierungsmechanismus nicht zerstören möchten, müssen wir nur die findClass-Methode selbst definieren. Der Hauptteil dieser Methode besteht darin, das Gegebene zu vervollständigen Klassendateipfad und wandeln Sie ihn in die Aufgabe des Klassenobjekts um. Auf diese Weise können wir einen neuen benutzerdefinierten Klassenlader erstellen ().loadClass(Klassendateipfad). Obwohl unser benutzerdefinierter Klassenlader keine LoadClass-Methode hat, verwendet er standardmäßig den ClassLoader der übergeordneten Klasse, sodass der übergeordnete Delegierungsmechanismus nicht vorhanden ist zu diesem Zeitpunkt kaputt. .

Wenn wir den übergeordneten Delegierungsmechanismus zerstören möchten, können wir LoadClass neu schreiben, die LoadClass-Methode der übergeordneten Klasse nicht mehr aufrufen und die Art und Weise des Ladens der Klasse selbst definieren. Diese Situation ist sehr gefährlich, da die Klasse, die wir laden möchten, möglicherweise auch andere Klassen aufruft. Zu diesem Zeitpunkt wird sie jedoch mit einem benutzerdefinierten Klassenlader geladen, sodass zu diesem Zeitpunkt Probleme auftreten.

Unterbricht den Mechanismus der elterlichen Delegation nicht

Das Ausführungsergebnis davon ist wahr und der übergeordnete Delegierungsmechanismus wird nicht unterbrochen, da wir nur die findClass-Methode neu schreiben. Selbst wenn in der Mitte ein neuer Klassenlader neu erstellt wird, kann garantiert werden, dass dieselbe Klasse von derselben geladen wird Klassenlader.

Durchbrechen des elterlichen Delegationsmechanismus

おすすめ

転載: blog.csdn.net/huanfeng_AI/article/details/132119223