2013-06-21 84 views
1

我正在尋找一種將某些跟蹤診斷添加到某些遺留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 

    } 

} 

我自己的,我想提出在B上可用的對象和C.什麼是做到這一點在Java中不改變該甲對乙調用該方法的正確方法和B調用C的方法?

+0

你將不得不改進你的問題才能得到答案。也許提供一些例子,例如使用'methodOfA','methodOfB'等一些名字。從標題看來我似乎有一個靜態成員可以完成這項工作,但是我可能誤解了你的全局引用 –

+2

... – lrl

回答

4

您可以使用AOP(Aspect Oriented Programming)和/或其他形式的字節碼操作播放各種遊戲。

是否你應該變化很大。

這取決於您的精確的需要,以及您需要如何使用「注入」對象。由於像AspectJ這樣的工具已經成熟,我會首先考慮AOP。 AOP和ThreadLocal可能是你所需要的。

+0

感謝答案和ThreadLocal建議。我會詳細調查這兩個 – imrichardcole