Вставка в Java Class Methods (без интерфейсов) - PullRequest
1 голос
/ 30 января 2012

Я хотел бы вставить методы класса для динамического расширения объекта.

Я уже знаю о материале java.lang.reflect.Proxy, но он слишком ограничен для реального вставления.

С Использование java.lang.reflect.Proxy для вставкив Java Class Methods первое ограничение:

(...) метод должен вызываться через экземпляр прокси-класса.Так, например, вызовы вложенных методов не будут перехвачены.

И худший:

(...) метод должен быть определен в интерфейсеэто реализуется объектом, который проксируется.Его нельзя вызвать через экземпляр класса, который не реализует интерфейс.

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

Я знаю, что это довольно просто в Python & C, и в приведенной выше статье говорится, что это возможно:

Следующийстатья в этой серии будет иллюстрировать некоторые методы преодоления этих ограничений.

К сожалению, я не могу найти эту статью.

1 Ответ

3 голосов
/ 30 января 2012

Попробуйте использовать CGLIB:

Вот учебник, который я написал пару лет назад, это довольно простое введение в CGLIB: CGLIB intro

Если вам нужно еще больше энергии, рассмотрите возможность использования AspectJ

Надеюсь, это поможет

...