我正在寻找一种方法来为一些遗留Java代码添加一些跟踪诊断。在这个意义上的遗产我的意思是我不能改变任何方法。如果我们考虑以下对象:
public class ClassIOwnAndCanChange {
public static void main(String[] args) {
// store my object here that I want to make
// available in LegacyClassA and B
myMethod("foo", 100);
}
}
public class LegacyClassA {
// method I cannot change
public void myMethod(String name, int timer) {
//want to get my 'injected' object here so that I can,
//for instance, time this method
methodCallThatTakesSomeTime("some param");
}
}
public class LegacyClassB {
// method I cannot change
public void methodCallThatTakesSomeTime(String name) {
// want to get my 'injected' object here for
// diagnostic reasons
}
}
我拥有A,我想在B和C中创建一个对象。在Java中执行此操作的正确方法是什么,而不更改A调用B的方法和B调用C的方法?
答案 0 :(得分:4)
您可以使用AOP(Aspect Oriented Programming)和/或其他形式的字节码操作来玩各种游戏。
是否变化很大。
这取决于您的精确需求,以及您需要如何使用“注入”对象。我首先考虑AOP,因为像AspectJ这样的工具已经成熟。可能就是你需要的AOP和ThreadLocal
。