Вы можете получить инъекцию байт-кода с помощью Java-агентов.
java Agent - это библиотека, которая перехватывает загрузку байт-кода в загрузчике классов и улучшает ее до того, как она будет загружена в JVM. Конечно, такая библиотека обычно полагается на librairies манипуляции байт-кода, такие как Javassist, ASM или CGLib. Итак, манипуляция байткодом выполняется только один раз, когда класс загружен.
Смотрите официальный Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html
В данной статье описывается, как сделать довольно много, что вы хотите: http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html
Кроме того, если вы действительно заинтересованы в байткоде основе, эта статья от одного разработчиков JRebel вам должно понравиться: http://arhipov.blogspot.com/2011/01/java-bytecode-fundamentals.html
Наконец, вы можете взглянуть на Серена, личность, которую я только начал писать. Это агент Java, который расширяет сериализуемые классы. Это только начало, но оно работает. https://github.com/oliviercroisier/seren
Спасибо за ответ, но вы по-прежнему не дали ответа на три вопроса. –
Извините, вот еще несколько объяснений. 1: отсутствие штрафа за производительность, это чистый байт-код (без прокси). 2: Это происходит только один раз, при загрузке класса, см. Выше. 3: Код агента находится в банке, которую вы должны указать в командной строке (-javaagent vm parameter); сгенерированный код живет с остальной частью «нормального» кода, в пространстве PermGen в куче. –