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