在不通过方法的情况下在Java类之间共享对象

时间:2013-06-21 13:08:44

标签: java

我正在寻找一种方法来为一些遗留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的方法?

1 个答案:

答案 0 :(得分:4)

您可以使用AOP(Aspect Oriented Programming)和/或其他形式的字节码操作来玩各种游戏。

是否变化很大。

这取决于您的精确需求,以及您需要如何使用“注入”对象。我首先考虑AOP,因为像AspectJ这样的工具已经成熟。可能就是你需要的AOP和ThreadLocal