Правильное поведение для загрузчика классов в Java:
- Если он уже загружен, верните класс
- Вызвать родительский loadClass()
- Попробуйте загрузить сам класс.
Таким образом, класс, определенный в пути к системе, всегда должен загружаться первым. Tomcat определяет загрузчик классов для каждой войны, у которого есть системный загрузчик классов как родительский, поэтому, если вы попытаетесь загрузить класс, он сначала рассмотрит путь к системному классу, а затем в пути к классам, определенном в военном файле.
По моему пониманию, это происходит по двум причинам:
- Чтобы избежать проблем с различными версиями используемых классов. Представьте, что я переопределил java.lang.Object в войне, это был бы кошмар.
- Чтобы избежать зависимостей от дочерних загрузчиков классов: системный загрузчик классов не может зависеть от дочерних загрузчиков классов: например, было бы трудно переустановить войну.
Итак, вопрос:
В дополнение к вышеуказанным проблемам есть ли какие-либо другие проблемы для реализации загрузчика классов, который сначала не выполняет родительский поиск?