我有一個相當大的代碼庫。在很多地方,我有一段這樣的代碼:是否有可能在運行時更改此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