2012-06-08 3 views
1

실제로 두 가지 질문이 있습니다.호출자 (또는 호출자의 호출자 또는 호출 스택에서 더 깊은 호출자) 인스턴스 ID를 얻는 방법 - [email protected]

첫 번째 것은 -이 ([email protected])가 '이'(aspect의 내부, 'this'를 얻기 위해 pjp.getTarget() 사용) 같은 ID를 어떻게 얻을 수 있는가입니다.

두 번째 것은 현재 호출 프로그램의 인스턴스 ID를 얻기 위해 현재 프로그램 실행 지점 (다른 클래스의 일부 메소드 또는 더 깊은 방법)입니다.

을 사용하여 호출 스택을 가져온 다음 필요한 호출자가 있는지를 결정할 수 있습니다. 그런 다음 호출자의 인스턴스 ID를 가져오고 싶지만 가져 오는 방법을 모릅니다.

+0

는 기준 ID를 얻기 위해 하나 개의 솔루션을 발견 문자열 = 해시 코드는, Integer.toHexString (System.identityHashCode (pjp.getTarget())); 하지만 ... 디버거에서 볼 수 있듯이 ClassName @ HashCode와 같지 않습니다. – ru5t

답변

0

Java ReflectionStackTraceElement을 사용할 수 있습니다.

StackTraceElement[] elements = new Throwable().getStackTrace(); 

    String calleeMethod = elements[0].getMethodName(); 
    String callerMethodName = elements[1].getMethodName(); 
    String callerClassName = elements[1].getClassName(); 

    System.out.println("CallerClassName=" + callerClassName + " , Caller method name: " + callerMethodName); 
    System.out.println("Callee method name: " + calleeMethod); 
+0

my.package.myClass와 같은 className을 얻을 수 있다는 것은 사실입니다. 나는 이미 주제로 게시했지만,이 클래스의 ___instance___가 현재 메소드를 호출 하는지를 알아야합니다. – ru5t

관련 문제