ClassLoaders - это в основном элементы, которые придают смысл классам JVM. Они образуют иерархию, в которой корень лежит в JVM и загружает классы Java. ApplicationClassLoader - это первый ClassLoader, который вы должны учитывать, поскольку он загружает все классы вашего приложения.
Когда класс загружен, все его ссылки на другие классы разрешаются и классы классов тезисов загружаются. JVM по умолчанию предоставляет систему, в которой загрузчики классов сначала попросят своего родителя, чтобы они уже загрузили класс. Если нет, они ищут в своем пути к классам
Два класса могут быть изолированы, если они живут в двух разных загрузчиках классов, а не в загрузчике классов приложений. Это не сложно. Вам нужно только создать загрузчик классов (например, URLClassLoader), указав его родительский элемент и его путь к классу (место, где находится байт-код)
Затем вы скажите ему загрузить класс. Он попросит своего родителя, и если класс еще не загружен, он будет искать его путь к классам и загрузить его. Если вы создадите другой загрузчик классов, прикрепленный к тому же самому родителю, классы, загруженные первым, никогда не будут отображаться секундами, поскольку они являются братьями и сестрами. А вторые может, загружает класс с таким же именем без каких-либо проблем
Это довольно хорошей изоляция
App сервера используют другую форму делегации иметь откровенную изоляцию между приложениями. они переопределять загрузчик классов, проходящий, например, URLClassLoader и обратный процесс делегирования, начав поиск классов в их пути к классам, а затем попросить родитель
Я полагаю, что эти два класса не находятся в отдельных пространствах имен? –
Я не понимаю, что означает «пространство имен» в контексте Java. Имя пакета? Пусть они будут в разных пакетах, если это важно. – Nulldevice
К сожалению, я имел в виду пакеты. А также, я неправильно понял ваш вопрос, поэтому я не думаю, что это актуально! –