2013-06-21 2 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 

    } 

} 

I가를 소유하고 나는 A가 B에 호출하는 방법을 변경하지 않고 자바에서이 작업을 수행하는 올바른 방법은 무엇 B의 객체를 사용할 수 있도록 좋아하고 C. 것 B가 C를 호출하는 방법은?

+0

답변을 얻으려면 질문을 개선해야합니다. 예를 들어'methodOfA','methodOfB' 등의 일부 이름을 사용하여 예제를 제공 할 수 있습니다. 정적 멤버가 작업을 수행 할 수있는 제목에서 보입니다.하지만 내가 오인 할 가능성이 있습니다. –

+2

일종의 글로벌 참조 ... – lrl

답변

4

AOP (Aspect Oriented Programming) 및/또는 다른 형식의 바이트 코드 조작으로 모든 종류의 게임을 즐길 수 있습니다.

일까요?

정확한 요구 사항과 "주입 된"개체를 어떻게 사용해야하는지에 따라 다릅니다. AspectJ 같은 도구는 성숙하므로 AOP를 먼저 고려해야합니다. AOP 및 ThreadLocal 만 있으면 충분합니다.

+0

감사합니다. 답변 및 ThreadLocal 제안. 그 두 가지를 자세히 조사하겠습니다. – imrichardcole

관련 문제