Le chargement dynamique de classes permet de charger, pendant que le programme tourne, des classes externes à lui. Cela sert pour étendre une application sans avoir besoin de la recompiler et d'en livrer un nouvelle. Cela sert également abondamment dans la notion de plugin. Par exemple Eclise fonctionne ainsi, on a pas besoin d'un nouvel Eclipse si on veut lui ajouter une fonctionnalité, on télécharge un plugin qu'Eclipse charge dynamiquement.
Deux outils sont disponibles pour le moment : JHelpJarClassLoader et JHelpClassLoader.
JHelpJarClassLoader permet de charger un ou plusieurs jar.
JHelpClassLoader.
permet d'agréger un ou plusieurs "class loader" ainsi que des fichiers ".class" (java compilé).
Ces deux outils sont des "class loader". Un "class loader" est un chargeur de classes, c'est à dire qu'il est chargé, à partir du nom d'une classe, la chargé en mémoire (Si ce déjà au préalablement fait) et donné un pointeur vers sa description à la JVM quand elle à besoin de l'utilisée.
Par défaut, il y a un class loader de crée et utiliser, c'est lui qui permet de faire la relation entre le nom de la classe et le code à exécuté. Java nous permet de faire nos propres class loader et de les utiliser. C'est ce que fait ces deux outils.
Voici un exemple d'utilisation, admettons que l'on ait l'interface :
Cette interface va se trouver à la fois dans le programme principale et dans un jar que l'on à compilé à part. Admettons pour simplifier l'exemple que l'on est convenu que la classe implémentant Plugin dans le jar soit nommé : jhelp.samples.PluginImplementation.
Voici comment on ferait dans le programme principal pour chargé cette classe :
Où Reflector est utilisé ici pour créer une instance de la classe une fois celle-ci chargée en mémoire.