我有一个相当大的代码库。在很多地方,我有一段这样的代码:是否有可能在运行时更改此java代码以插入一些小代码
for (MyObjectType myobj : myList) {
//...do something with myobj
}
MyObjectType是在我的应用程序的基本对象,我遍历其中不乏非常频繁。我有一些log4j设置,以便我记录有关我正在处理的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代理?),它会有多难(可能不值得)。
我从来没有使用任何java字节码库,只是轻轻一跳。
Coccinelle不支持Java(还),这太遗憾了......否则它一直是这项工作的理想工具! – fge 2011-12-16 18:41:00