Un ClassLoader est un objet responsable du chargement dynamique de la classe Java pendant l'exécution pour empêcher JVM de se rendre compte que ClassLoader fait partie de l'environnement d'exécution Java. Cela facilite la vie de la JVM. JVM charge les classes en mémoire lorsque l'application le requiert et ne les charge pas toutes en même temps. ClassLoader entre alors en scène et charge la classe en mémoire.
Commencez votre cours de développement de logiciels libres
Développement Web, langages de programmation, tests de logiciels et autres
Voyons comment java.lang.ClassLoader est implémenté dans le code de la bibliothèque Java et quelles sont ses fonctionnalités.
java.lang.ClassLoader :
public abstract class ClassLoader { public class loadClass(String name); protected class defineClass(byte[] b); public URL getResource(String name); public Enumeration getResources(String name); public ClassLoader getParent() };
Regardons quelles sont les fonctionnalités du ClassLoader en java :
Exemple pour démontrer le fonctionnement d'un chargeur de classe :
Code :
public class A() { public void addOne() { B b = new B(); b.addTwo(); } }
Comment le ClassLoader chargera les classes dans le scénario ci-dessus :
Dans ce didacticiel, nous allons parler des différents types de chargeurs de classes et de leurs fonctionnalités intégrées, ainsi que des raisons pour lesquelles ils sont utilisés.
L'extension ClassLoader est un enfant de Bootstrap. Il est utilisé pour charger les extensions de toutes les classes Java entrant dans JVM.
Chaque classe a un lien vers toutes les classes qu'elle crée. Il doit effectivement disposer d’une mémoire pour stocker les champs statiques. Si classLoader perd un champ statique pour une classe unique, cela signifie simplement que vous perdez un ClassLoader. Si vous le faites, vous perdrez toutes les classes et un tas d'objets et tous les objets auxquels ils sont liés. Les fuites de ClassLoader peuvent être bien trop dangereuses.
Chaque fois que nous effectuons un redéploiement ou ajoutons des améliorations au moment de l'exécution dans notre application, ClassLoader chargera une classe, ne rechargera ni ne déchargera jamais une classe. Ainsi, lorsqu'un classLoaders charge une seule classe à partir de zéro, il aura des objets afin de la recréer ou de la recharger à partir de zéro. L'ancien chargeur de classe envoie l'objet de l'ancien état au nouvel état. Donc lors de cette transition, il pourrait y avoir une fuite. Ainsi, lorsque vous divulguez un objet, vous divulguez une classe, et c'est donc le chargeur de classe.
There are 3 principles that a java ClassLoader works upon:
This is the custom ClassLoader example named with ClassLoaderJava.java:
Code: ClassLoaderJava.java
import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class ClassLoaderJava extends ClassLoader{ // created to load class and invoke method. public void classLoadingDemo(String classBinString, String methodName) { try { // will create an instance of class loader. ClassLoader classLoaderInstance = this.getClass().getClassLoader(); // creating an instance of a class to store the loaded class. Class loadedClass = classLoaderInstance.loadClass(classBinString); System.out.println("Loaded class name is: " + loadedClass.getName()); // Fetching the constructor of loaded class. Constructor con = loadedClass.getConstructor(); // creating an instance to invoke the method. Object obj = con.newInstance(); // Will store the method fetched from loaded class. Method invokingMethod = loadedClass.getMethod(methodName); System.out.println("Invoked method name is: " + invokingMethod.getName()); invokingMethod.invoke(obj); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
Code: DemoClass.java
public class DemoClass { public void add() { System.out.println("This method is invoked by the classLoader."); } }
Code: LoadingTest.java
public class LoadingTest { public static void main(String[] args) { ClassLoaderJava classLoader = new ClassLoaderJava(); classLoader.classLoadingDemo("DemoClass" , "add"); } }
Output:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!