Class loader

Chargeur de classes.

Besoin

Charger en mémoire des classes Java compilées.

Analyse

Les ClassLoaders permet à une plate-forme Java de définir des classes en mémoire. Eux seuls déterminent l'origine du code d'une classe et les permissions qui lui sont associées, en fonction de cette origine et de la politique de sécurité en vigueur.

La règle de chargement d'une classe est : toute classe B nécessaire à une classe A est chargée par le ClassLoader de A.

Conception

Les ClassLoaders définissent une classe en mémoire à partir d'un ensemble d'octets, pouvant provenir d'un fichier de classe (.class) local, du réseau, ou de tout autre source capable de fournir des octets (y compris la mémoire).

Implémentation

ClassLoader Version 1 Commentaire
Domaine Technologie Release 1 2 3 4 5
Type système Chargement de l'ensemble des classes (système ou non) accessibles depuis le CLASSPATH Chargement des classes de la plate-forme Java (Core API), c'est-à-dire provenant des fichiers situés dans %JAVA_HOME%/lib/ et %JAVA_HOME%/jre/lib/ext/ Privilégié dans la mesure où il n'est pas un ClassLoader à proprement parler (il est en grande partie écrit en code natif, charge les classes d'une manière spécifique à la plate-forme, n'hérite pas de java.lang.ClassLoader, et n'est pas accessible par le développeur). On peut identifier les classes chargées par ce ClassLoader en examinant la valeur retournée par <i>LaClasse</i>.getClassLoader(). Une classe utilisateur (provenant du CLASSPATH ou d'ailleurs) retournera une instance de java.net.URLClassLoader (par défaut sun.misc.AppLauncher$AppClassLoader), tandis qu'une classe système retournera null, ce qui désigne le chargeur de classe système. Les chargeurs de classes sont également responsables du chargement d'autres ClassLoaders, ce qui implique une définition circulaire. C'est pourquoi on appelle le chargeur système le primordial class loader (on trouve également les termes de internal class loader, bootstrap class loader ou default class loader, cette dernière appelation étant trompeuse dans la mesure où le chargement d'une classe par défaut ne passe plus dans Java 2 par ce chargeur mais par un véritable ClassLoader).
RMI Oui Comme le chargeur de classes système, ce chargeur n'est pas un ClassLoader à proprement parler (il n'hérite pas de java.lang.ClassLoader).
Sécurisé Non java. security. SecureClassLoader Spécialisation de de ClassLoader prenant en compte les domaines de protection (origine du code : URL + certificats).
URL Non java. net. URLClassLoader Spécialisation du SecureClassLoader ancètre des ClassLoaders chargeant des classes non-système. permet de charger une classe référencée par une URL (de type https:// ou file:// ), située dans un fichier (.class ou .jar) où à partir d'une liste d'URL par ordre de préférence. Par défaut, les classes chargées depuis un tel ClassLoader sécurisé ne pourront accéder qu'aux classes provenant d'une des URL spécifiées dans l'invocation de ce ClassLoader.
Applet Oui Oui, sécurisé (hérite de java. security. SecureClassLoader) Les chargeurs d'applets, bien que non standards (issus de packages propriétaires de Microsoft, Netscape ou Sun), sont généralement inspirés du chargeur privé sun.applet.AppletClassLoader, utilisé dans l'outil appletviewer. ClassLoader par délégation.

Notes

Exemples

Des exemples de ClassLoader sont :