Использование cglib для переопределения локальных методов пакета - PullRequest
2 голосов
/ 29 октября 2010

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

Моя проблема в том, что если у рассматриваемого метода есть локальная доступность (то есть по умолчанию), то метод, который я создаю, по-видимому, игнорируется, и пользователь получает AbstractMethodError при его вызове.

Сгенерированные мной классы находятся в том же пакете, что и исходный класс (я создаю класс с именем original.package.OriginalClassName_AutomaticImplementation), хотя они, конечно, загружаются другим загрузчиком классов (т. Е. Тем, который загружает сгенерированный массив байтов). с помощью cglib, а не с файла на диске); Я подозреваю, что это проблема. Если так, есть ли способ обойти это?

1 Ответ

2 голосов
/ 29 октября 2010

При работе с пакетом local это загрузчик классов и имя пакета, которые определяют, доступен ли метод или нет.Это сделано для того, чтобы классы не получали несанкционированный доступ к методам API.Вы можете создать класс в пакете java.lang и получить доступ к локальным методам пакета в java.lang.

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

...