Я пытаюсь добавить метод к существующему классу во время выполнения с Bytebuddy, и я не получаю ошибок, но не получаю ожидаемый результат. Это мой агент:
public class Agent {
public static void premain(String arguments, Instrumentation instrumentation) {
System.out.println("Agent for add a method ");
new AgentBuilder.Default()
.with(new AgentBuilder.InitializationStrategy.SelfInjection.Eager())
.type((ElementMatchers.nameContains("cup")))
.transform((builder, typeDescription, classLoader, module) -> builder
.defineMethod("method3", void.class, Visibility.PUBLIC)
.intercept(MethodDelegation.to(AddMethod.class))
.method(ElementMatchers.any())
.intercept(SuperMethodCall.INSTANCE
.andThen(MethodCall.invoke(ElementMatchers.nameContains("method3"))))
).installOn(instrumentation);
}
}
Ожидаемый результат должен быть вызван этой функцией:
public static void method3() throws Exception {
System.out.println("This is method 3");
}
Выход из командной строки при запуске - просто
Agent for add a method
hello world
Это файл Java, который я пытаюсь установить на инструменте.
public class cuppy {
public static void main (String args [])
{
method1();
}
public static void method1 ()
{
System.out.println("hello world);
}
}