Я видел много фреймворков, которые позволяют внедрять байт-код в классы Java во время выполнения. Но во всех примерах и документации они просто показывают, как внедрить методы BEFORE и AFTER. Но мне нужно ввести где-то в СРЕДНЕМ методе. Как мне это сделать?
Вот пример метода, в который я мог бы ввести:
public void doSomething() {
doOneThing();
doSomeMoreStuff();
if (someCondition) {
doEvenMoreThings();
}
if (someOtherCondition) {
doRandomStuff();
}
doStuff();
}
Я хочу залить сюда
if (someOtherCondition) {
doRandomStuff();
// INJECT HERE
}
чтобы полностью преобразованный метод выглядел примерно так:
public void doSomething() {
doOneThing();
doSomeMoreStuff();
if (someCondition) {
doEvenMoreThings();
}
if (someOtherCondition) {
doRandomStuff();
callMyInjectedMethodHere(); // This call has been injected
}
doStuff();
}
Это возможно? Если да, то как?
Каждый фреймворк, который я когда-либо видел, имеет документацию, которая предполагает, что я могу внедрять только непосредственно над doOneThing();
или непосредственно под doStuff();
.
Фреймворк, который вы используете, на самом деле не имеет значения, любой, который вам нравится, позволяет вам это сделать, это хороший ответ для меня.