Существует 10 миллионов статей и документов о , что такое загрузчики классов Java, и , как / *, почему *писать свои собственные... но все они, кажется, предполагают некоторые вещи, на которые я не могу найти простой ответ!
Я понимаю работу загрузчика классов :по чтению байт-кода и созданию из него объекта. Различные загрузчики классов делают это по-разному и т. д.
Но поскольку мне никогда не приходилось кодировать API-интерфейс загрузчика классов в моем собственном коде и никогда не приходилось писать свой собственный, мне очень трудно понять , когда собственный код ClassLoader
действительно срабатывает.
Например:
public static void main(String[] args) {
Fizz fizz = new Fizz();
fuzz.buzz();
}
Здесь у нас есть объект Fizz
. Прежде чем Fizz
может быть создан экземпляр,нам нужен загрузчик классов, чтобы запустить и загрузить Fizz.class
в свой кеш. Где и когда это происходит?!?! Этого явно нет в моем коде, поэтому оно должно быть неявно где-то в JRE...?
Касательно этого вопроса, если я напишу свой собственный загрузчик классов, скажем, WidgetClassLoader
и хочу настроить его для загрузки либо всех классов моего приложения, либо, возможно, только моего Fizz.class
, как мне «привязать» этот WidgetClassLoader
к моему приложение, чтобы оно знало, какой загрузчик классов использовать? Должен ли мой код явно вызывать этот загрузчик классов или он будет неявным, как в первом примере? Заранее спасибо!