Где происходит внедрение байт-кода?
у меня естьSomeObject.java
файл:
class SomeObject {
String name;
}
Компиляция создает байт-код, содержащийSomeObject.class
файл.
0xCAFEBABE...
Если мы используем SomeObject на JVM, он загружается текущим загрузчиком классов и все работает нормально.
Теперь давайте предположим, что я хотел бы иметь некоторое динамическое генерирование кода. Я могу написать свою собственную аннотацию
@Target(ElementType.TYPE)
public @interface Data {
...
}
и добавьте его как модификатор в объявление класса:
@Data
class SomeObject {
String name;
}
Я также могу сохранить его для выполнения с@Retention(RetentionPolicy.RUNTIME)
:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Data {
...
}
ВопросГде аннотации используются для внедрения байт-кода? Внедряет ли загрузчик классов байт-код при загрузке класса с соответствующей сохраненной аннотацией времени выполнения, как на этом рисунке:
source -(compile)-> bytecode -(classloader bytecode injection)-> injected bytecode -(classloading)-> JVM loaded bytecode