Можно ли определить Java ClassLoader, который возвращает совершенно разные классы к запрошенному? - PullRequest
2 голосов
/ 24 сентября 2008

Я пробовал это, но получаю ClassNotFoundException при вызове:

Class.forName("com.AClass", false, mySpecialLoader)

Ответы [ 2 ]

5 голосов
/ 24 сентября 2008

ClassLoader должен будет вызвать defineClass, чтобы получить Class. Согласно JavaDoc для defineClass:

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

Если имя пустое, оно будет получено из байт-кода. Таким образом, вы можете вернуть любой класс, который хотите, если он называется com.AClass. Другими словами, вы можете иметь несколько версий com.AClass. Вы даже можете использовать что-то вроде JavaAssist для создания класса на лету.

Но это не объясняет ClassNotFoundException - похоже, ваш загрузчик классов ничего не возвращает.

1 голос
/ 23 октября 2008

Невозможно вернуть класс с именем, отличным от запрошенного. Однако можно использовать инструменты манипуляции с байт-кодом, такие как ASM, для автоматического переименования класса, который вы хотите вернуть, в запрошенный.

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