시작하기 전에 연습 1.4: 고급 프로브 작성을 읽는 것이 좋습니다.
Probekit을 사용하면 간단한 Java 코드 단편으로 간단한 프로브를 쉽게 작성할 수 있습니다. 연습 1.4의 경우처럼 기본 프로브를 사용해도 복잡한 사항을 수행할 수 있습니다. 그러나 때로는 간단한 프로브를 사용해서는 원하는 대로 복잡한 사항을 수행할 수 없는 경우가 있습니다. 그러한 경우에는 실행할 모든 논리를 프로브 단편에 맞추는 대신 프로브용 "런타임 지원 라이브러리"를 작성할 수 있습니다. 그런 다음 모든 실제 조치가 있는 이 라이브러리를 프로브 단편이 호출하도록 할 수 있습니다.
런타임 라이브러리를 사용할 경우 반영(reflection)을 사용하여 메소드를 호출해야 할 경우가 있습니다. 그 이유는 생성된 프로브 클래스가 bootstrap 클래스 로더에 의해 로드되므로 system 클래스 로더에 의해 로드된 클래스에 직접 액세스할 수 없기 때문입니다.
다음은 런타임 라이브러리의 entryHandler 메소드를 호출하는 "시작" 단편의 예입니다.
호출할 정적 메소드 entryHandler를 사용하는 com.sample.ProbeSupport 클래스가 있다고 가정하십시오. entryHandler가 인수를 사용하지 않으며 클래스가 시스템 클래스 로더에 의해 로드될 수 있다고 가정하십시오.
try { String className = "com.sample.ProbeSupport"; ClassLoader sysLoader = ClassLoader.getSystemClassLoader(); Class cls = Class.forName(className, true, sysLoader); java.lang.reflect.Method mth = cls.getMethod("entryHandler", null); mth.invoke(null, null); } catch (Throwable t) { System.out.println("Probe error while attempting reflection:"); t.printStackTrace(); }
각 호출시의 시간 절약을 위해 클래스 범위의 단편을 사용하여 정적 java.lang.reflect.Method 객체를 선언하고 한 번만 초기화할 수 있습니다.
요약에 있는 내용을 검토하여 학습을 완료하십시오.