Где происходит внедрение байт-кода?

мотивация

у меня есть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   

Ответы на вопрос(1)

Ваш ответ на вопрос