Class Loader - Tensho97/Aprende-a-Aprender GitHub Wiki
Tipos de ClassLoader
Cuando nosostros lanzamos un programa sencillo desde la consola nos encontramos con la siguiente estructura de cargador de clases.
BootStrapClassloader:
Este es el cargador de clases principal encargado de cargar las clases core del JDK como por ejemplo String, Integer, Date ect. Estas clases están ubicadas en la libreria rt.jar deltro del JDK.
ExtensionClassLoader:
Este es otro cargador de clases que se encarga de cargar las clases que se encuentran ubicadas en la carpeta JDK/LIB/EXT y hacen referencia a extensiones que necesita el JDK tipo proveedores de seguridad, parser XML etc.
SystemClassLoader: Este cargador de clases es uno de los mas habituales ya que se encarga de cargar las clases que se encuentran deltro del classpath de la aplicación. Normalmente librerias que nosostros necesitamos tipo Hibernate, Spring etc.
Clases y Objetos
En el JDK nos encontramos con una estrucutura de clases como la siguiente
Como podemos observar que no encontramos ninguno de los cargadores citados anteriormente. En primer lugar es normal que no exista una clase BootStrapClassLoader ya que no esta definida en código java sino en código nativo es la que se encarga de cargar las clases principales Java
Sin embargo nos quedan dos cargadores por encontrar. Eso se debe a que los ClassLoaders son tanot clases como objetos de la maquina virtual. Disponemos de una clase denominada URLClassLoader la cual será la encargada de instanciar dos objetos de tipo "URLClassLoader" el ExtensionClassLoader y el SystemClassLoader cada uno de los cuales apunta a URLs distintas.
Relación de ClassLoaders
Los objetos de ClassLoader es que están relacionados entre si con una relación padre/hijo
Esto implica que cuando un ClassLoader va a cargar una clase primero pregunta a su ClassLoader padre si el la tiene disponible en tal caso este la carga. En el caso de que el ClassLoader padre no la pueda cargar delega la petición en el siguiente padre hasta llegar al BootStrapClassLoader .Si ninguno de los ClassLoader padre puede cargar la clase , el cargador de clases actual intentará cargarla de sus rutas disponibles . Sino la encuentra se producirá un ClassNotFoundException.
Por ejemplo si solicitamos cargar la clase Integer sucederá lo siguiente:
En cambio si queremos cargar la clase persona del classpath
Autor: Julián