Я изучаю процесс загрузки java-класса и сталкиваюсь с некоторой путаницей.Как узнать текущий классLoader в java
Я знаю, что при загрузке класса Java, текущего ClassLoader обыкновения загружать класс Java напрямую, и он будет передавать его родительского загрузчика (рекурсивный процесс), пока родитель наклоняет загрузить этот класс.
Вопрос заключается в том, что: , что текущий ClassLoader?Bootstrap? Расширение? Приложение?
Как получить текущий классLoader ?. , и я знаю, что есть API:
xxx.Class.getClassLoader();
, но я не уверен, что значение возвращение ли currentClassLoader. Я думаю, что это должен быть классLoader, который загружает этот класс java класс в реальность.
Чтобы описать мой вопрос более подробно, я приведу пример.
Я получаю содержание в блоге.
ThreadContextClassLoader используется для борьбы с Java SPI, интерфейс определен в Java
core lib
и загружен Bootstrap ClassLoader и третьей сторона реализацией этого интерфейса, то банка загружается AppClassLoader
Решение: традиционный classLoader не может справиться с этим делом, потому что он не может обнаружить стороннюю банку, когда мы используем стороннее внедрение в основной библиотеке.
большинство из вышесказанного, я могу понять, но решение сделать меня путаница: , например, интерфейс Corea и класс CoreB находятся в Java core lib
и должен быть загружен Bootstrap ClassLoader а AImpl является орудием A третьей стороной и должен быть загружен Загрузчик AppClass.
сегмент кода, как показано ниже:
public Interface CoreA{
void add();
}
public Interface AImpl implements CoreA{
void add(){};
}
public class B{
public void demo(){
a = new AImpl();
}
}
тогда, если мы ссылаемся B
в main method
, то мы будем загружать B
потому что загрузчик классов из B
является Bootstrap тогда о AImpl
тока Загрузчик Bootstrap, так что его нельзя найти? Я не знаю, насколько я это понимаю?
Любые советы будут оценены.
В разных средах используются разные стратегии загрузки классов. По умолчанию используется для первого распространения запроса загрузки класса на загрузчик родительского класса. Если он не может загрузить класс, этот загрузчик этого класса попытается загрузить его. Однако некоторые загрузчики классов сервера приложений не будут сначала запрашивать загрузчик родительского класса, если они могут загружать класс самостоятельно. Далее, в OSGi существует еще более сложная магия загрузчика классов для реализации модульной системы. –
Нет такой вещи, как «текущий ClassLoader». Каждый класс загружается определенным ClassLoader. Вот и все. – VGR
Иногда я сталкиваюсь с термином 'current classloader', и все в порядке, это просто' classloader' текущего исполняемого класса. – dmitrievanthony