Итак, я использую java-агент с javassist для внедрения небольшого кода, связанного с мониторингом, в разные методы в разных классах.
Мой код агента Java:
public class ConverterAgent implements ClassFileTransformer {
public static void premain(String args, Instrumentation instrumentation){
System.out.println(">>>>>>>>>> Intializing Java agent <<<<<<<<<<");
ConverterAgent transformer = new ConverterAgent();
instrumentation.addTransformer(transformer);
}
public static void agentmain(String args, Instrumentation instrumentation){
System.out.println(">>>>>>>>>> Intializing Java agent <<<<<<<<<<");
ConverterAgent transformer=new ConverterAgent();
instrumentation.addTransformer(transformer);
}
@Override
public byte[] transform(final ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDoman,
byte[] classFileBuffer)
throws IllegalClassFormatException {
//javassist code goes here
return classFileBuffer;
}
}
И мои javassist инъекции выглядят так:
if ("className1".equals(className)){
//code
}
if ("className2".equals(className)){
//same code as in first class
}
if ("className3".equals(className)){
//same code as in first and second class
}
Итак, я ввожу один и тот же код несколько раз, я хочу оптимизировать свой процесс и вызывать метод для каждой инъекции, чтобы мне не приходилось копировать один и тот же код снова и снова. Но вот где я столкнулся со своей проблемой, какой тип метода я должен использовать и какие аргументы ему нужны, кроме имен классов и методов.