Quando si chiama loadClass()
su un ClassLoader
, il ClassLoader
controlla innanzitutto se la classe è stata caricata, o lo delega immediatamente al suo genitore ClassLoader
?Modello di delega del ClassLoader Java?
API Java dice:
Quando ha chiesto di trovare una classe o una risorsa, un'istanza ClassLoader delegherà la ricerca per la classe o la risorsa alla sua classe genitore loader prima di tentare di trovare la classe o risorsa stessa.
Ma c'è un capitolo specifico sulla classe loader nel libro Java Reflection in azione che dice:
Classe loader chiama findLoadedClass per verificare se la classe è stata caricata already.If una class loader non trova una classe caricata, chiama loadClass nel caricatore della classe genitore.
Quale è corretto?
Questo non è vero. Esistono molti modelli validi di caricamento delle classi come descritto su http://stackoverflow.com/a/245038/632951. Quello di cui parli come "corretto" è solo uno dei modelli. Gli altri modelli non sono in effetti implementati in questo modo. – Pacerier
Hai ragione, la risposta era troppo prescrittiva. Ho aggiunto un linguaggio più flessibile e ho aggiunto esempi di scenari in cui un programma di caricamento classe potrebbe deviare. Grazie per il feedback. –