我将使用Java Agent和Javassist来注入一些与监控相关的小代码到不同类中的不同方法中。
我的Java Agent代码:
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
}
我正在多次注入完全相同的代码,希望优化我的过程并为每次注入调用一个方法,这样就不必一遍又一遍地复制相同的代码。但是这里是我遇到的问题,我应该使用什么方法类型以及除了类和方法名之外需要哪些参数。