Что такое изолированный загрузчик классов в Java? - PullRequest
9 голосов
/ 06 марта 2012

При попытке решить эту проблему я столкнулся с некоторыми статьями и т. Д., Ссылающимися на «изолированные» загрузчики классов.Мне не удалось найти определение для изолированного загрузчика классов через поиск в Google, поэтому, возможно, этот термин не является широко известным жаргоном и, возможно, имеет другое значение в разных контекстах.

В любом случае, Maven'sВерный плагин может использовать изолированный ClassLoader: http://maven.apache.org/plugins/maven-surefire-plugin/examples/class-loading.html

Также один из ответов ниже ссылается статья, объясняющая, как создать «изолированный» ClassLoader .

Ни одна из ссылоквыше дает определение изолированного ClassLoader;они, кажется, предполагают, что читатель знает, что это значит, или может найти это.Однако вторая ссылка содержит подсказку о том, что означает «изолированный»:

Начальная загрузка позволяет запускать контейнер без загрязнения системного пути к классам.Это позволяет вам запускать ваши развернутые приложения с незагрязненным системным classpath в качестве его родителя. Вы достигли изоляции загрузчика классов.

Но я не совсем понимаю, что изолировано от того, что и как из этого параграфа или остальной части статьи.Я вижу, что он загружает одну версию класса без перезаписи / перезаписи другой версии - может быть, один загрузчик классов изолирован от другого, будучи разными экземплярами, если один не является родителем другого?Я не уверен.

Мне особенно нужна поисковая ссылка Google или SO, которая содержит ссылку, четко содержащую ответ.Прямая ссылка на ответ тоже работает.:)

Ответы [ 3 ]

9 голосов
/ 06 марта 2012

Автор использует термин «изоляция» в основном для обозначения того, что загрузчик классов начальной загрузки для JVM («основной» загрузчик классов) не содержит никаких дополнительных jar / классов (только один простой класс, который в свою очередь устанавливаетдочерний класс загрузчик (ы)).В статье не совсем понятно, почему она «изолирована», потому что она устанавливает только один дочерний загрузчик классов.Термин «изоляция» становится более очевидным, когда вы устанавливаете более одного дочернего загрузчика классов.Эти дети будут изолированы друг от друга тем, что они не будут использовать никаких классов (кроме основных классов JRE).Таким образом, вы можете сделать так, чтобы каждый ребенок использовал разные версии одной и той же банки.

2 голосов
/ 06 марта 2012

Вот как создать изолированный загрузчик классов , вы можете создать его в любой момент, когда вам нужен незагрязненный системный путь к классу, полезный для загрузки программ Java.

1 голос
/ 06 марта 2012

Насколько я понимаю из статьи, которую вы связали с этим, изолированный загрузчик классов является загрузчиком классов, который является отдельным от основного системного загрузчика классов.То есть классы, загруженные изолированным загрузчиком классов, не будут доступны каждому классу в JRE (только те, которые загружен изолированным загрузчиком классов [и любые классы, загруженные любыми загрузчиками дочерних классов]).

Это может быть полезно, поскольку для двух ваших зависимостей могут потребоваться разные версии одной и той же библиотеки.То есть ваши зависимости могут ожидать увидеть разные экземпляры одного и того же класса в библиотеке.Таким образом, предоставление им двух отдельных загрузчиков изолированных классов позволит им загружать нужные им классы и не мешать друг другу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...