У меня довольно большая база кода. Во многих местах у меня есть кусок кода, как это:можно изменить этот код Java во время выполнения, чтобы вставить небольшой код
for (MyObjectType myobj : myList) {
//...do something with myobj
}
MyObjectType является основным объектом в моем приложении, и я перебрать многие из них очень часто. У меня есть некоторые log настроить так, что я вхожу информацию о экземпляре MyObjectType Я имею дело с:
for (MyObjectType myobj : myList) {
MDC.put("myobj", myobj.identify());
...
logger.error("this message contains info about myobj")
}
Это действительно полезно. К сожалению, есть тонны для такого вида, когда я забыл использовать mdc.put(). Так я думал ... был бы каким-то образом, чтобы инструмент код так, чтобы:
- я обнаруживаю есть для цикла по коллекции MyObjectType
- вставить это в качестве первой команды внутри цикла:
MDC.put("myobj", myobj.identify());
Если есть способ (используя aop, instrumentation, java agent?), Насколько это сложно (возможно, это не стоит усилий).
Я никогда не пользовался какой-либо java-байт-кодовой библиотекой, просто пружинят легко.
Очень жаль, что Coccinelle не поддерживает Java (пока) ... Иначе это был бы идеальный инструмент для этой работы! – fge
Вместо использования магических трюков старайтесь не дублировать свой код, потому что именно это и вызвало вашу проблему. –