Вот проблема, с которой я сталкиваюсь. Существует огромное унаследованное приложение, работающее на java 1.3 и использующее внешний API, скажем, MyAPI v1.0. Точная реализация MyAPI 1.0 находится где-то в пути к классам, используемом приложением. Существует также механизм, который позволяет этому приложению использовать внешний код (какой-то механизм плагина). Теперь у меня есть другая java-библиотека (MyLib.jar), которая использует MyAPI v2.0 (которая НЕ на 100% обратная совместимость с v1.0), и я должен использовать ее из исходного приложения, используя этот механизм плагина. Поэтому я должен как-то позволить двум (несовместимым!) Версиям одного и того же API работать вместе. В частности, я хочу использовать MyAPI v2.0, когда классы API вызывается из классов MyLib.jar и использует MyAPI 1.0 во всех остальных случаях.Мой собственный загрузчик классов?
MyAPI 1.0 находится в пути к классам, поэтому он будет использоваться по умолчанию, это нормально. Я могу создать свою собственную версию загрузчика классов для загрузки классов из MyAPI 2.0 - без проблем. Но как мне все вместе? Вопросы:
Объекты MyLib.jar копируют экземпляры классов из MyAPI 2.0 (!). Означает ли это, что мне придется делать ВСЕ эти экземпляры через отражение (указав мой собственный загрузчик классов)? Это чертовски работа!
Если какой-либо объект MyAPI 2.0 получает экземпляр, и он внутренне создает экземпляр другого объекта из MyAPI, какой класс загрузчик он будет использовать? Будет ли он использовать мой загрузчик классов или по умолчанию?
Как правило, мой подход звучит разумно? Есть ли способ лучше?
«Классы всегда загружаются с родительского загрузчика классов». Правило может быть разбито пользовательским загрузчиком классов. С осторожностью. – Darron