У меня есть следующий код Javassist для изменения метода ведения журнала, чтобы он регистрировал только определенные случаи (в попытке обнаружить хакеров, переводящих большие суммы денег в игру, для контекста):
CtClass ctClass = ClassPool.getDefault().getCtClass(Trade.class.getName());
CtMethod commandMethod = ctClass.getDeclaredMethod("log");
commandMethod.setBody("if (/* conditions */) {"
+ " fw.write(sender + \" [\" + senderUser.getMoney() + \"/\" + senderOldBal + \"] sent \" + pay.getMoney() + \" to \" + receiver + \"[\" + receiverOldBal + \"/\" + receiverUser.getMoney() + \"]\");"
+ "}");
Я понимаю, что простой вызов ctClass.toClass()
не заменит текущий загруженный класс, и что для достижения этого мне необходимо использовать API инструментария в Java.Однако я не смог найти много объяснений о том, как использовать Instrumentation API.
Буду признателен за любые советы, как это сделать.